编译原理笔记

第一章 引论

1. 相关名词解释

编译:将高级语言翻译成汇编语言或机器语言的过程
翻译:把一种语言转换成与之等价的另一种语言
在这里插入图片描述
编译程序:源高级语言程序 -> 汇编成机器语言程序
解释程序:源高级语言程序 + 数据 -> 计算结果(不生成目标语言程序)

2. 编译程序的结构

在这里插入图片描述

词法分析

从左到右扫描源程序(字符串),识别出各个单词(记号—Token),确定单词的类型并将其转换成单词串;同时查词法错误,进行标识符登记,即符号表管理。

语法分析

从词法分析输出的单词序列中识别出各类短语表达式,并构造语法分析树(parse tree),并指出语法错误

语义分析

审查源程序是否有语义错误,为伪代码生成阶段收集信息,当不符合规范的时候报错

中间代码生成
  • 简单规范
  • 机器无关
  • 易于优化与转换
代码优化

对代码进行等价变换以求提高执行效率——提高运行速度或节省存储空间,或者二者兼顾

  • 与机器无关的优化
  • 与机器有关的优化
目标代码生成

将中间代码转换成目标机上的机器指令代码或汇编代码

表格管理
  • 管理各种符号表
  • 辅助编译工作过程
  • 完成静态绑定、管理编译过程
  • Hash表、链表等各种查、填表技术
出错处理

进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)

前端
  • 与源程序有关、与目标机器无关的部分
  • 词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化
后端
  • 与目标机器有关的部分
  • 与机器有关的代码优化、目标代码生成
    前端与后端的区别

对源程序(包括源程序中间形式)从头到尾扫描一次,并做有关的加工处理,生成新的源程序中间形式或目标程序,通常称之为一遍

多遍扫描的优点
  • 编译程序的结构清晰
  • 有利于进行细致和充分的代码优化
  • 易于采用覆盖技术,提高内存利用率
多遍扫描的缺点
  • 增加读写中间文件的次数,消耗较多的时间

3. 编译原理的应用

  • 研究提高软件开发效率的工具
  • 针对计算机体系结构的优化
  • 新计算机体系结构的设计

第二章 文法和语言

1. 文法的引入

文法

  • 严格定义句子的结构
  • 把语言的全部句子描述出来

形式语言

用精确的数学或机器可处理的公式定义的语言,是为了特定应用而人为设计的语言。

2. 符号和符号串

2.1 相关概念

字母表(符号表)

字母表是元素的有穷集合,一般用 ∑ 表示

符号

字母表中的元素,如字母、数字、标点符号等

符号串

由字母表中的符号组成的任何有穷序列

例如:∑ = {a, b},aab是∑上的一个符号串

  • 符号串的长度,记住 |s|,是指s中符号的个数
    如:|aab| = 3
  • 空串:不包含任何符号的符号串用 ε 表示,|ε| = 0
2.2 运算
符号串的连接

符号串的n次幂

在这里插入图片描述

集合的和运算

在这里插入图片描述

集合的乘积(连接)

在这里插入图片描述

集合的n次幂

在这里插入图片描述

集合的正闭包

在这里插入图片描述

集合的闭包

在这里插入图片描述
例题:
在这里插入图片描述

3.文法和语言的形式定义

3.1 文法的形式化定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中α是由终结符和非终结符组成的长度大于等于1的集合的符号串
β是终结符和非终结符构成的长度任意的符号串
在这里插入图片描述

一般约定
  • 第一条产生式的左部是开始符
  • 用尖括号括起来的是非终结符
  • 用大写字母表示 非终结符
  • 不用尖括号括起来的是 终结符
  • 用小写字母表示 终结符
文法举例

在这里插入图片描述

3.2 文法简写

在这里插入图片描述

3.3 语言的基本概念:推导和归纳
3.3.1 直接推导

在这里插入图片描述

3.3.2 间接推导

在这里插入图片描述

3.3.3 句型

在这里插入图片描述

3.3.4 句子

在这里插入图片描述

3.4 语言的形式化定义

在这里插入图片描述

3.5 文法的等价

在这里插入图片描述

4. 文法的分类

0型文法

在这里插入图片描述

1型文法

在这里插入图片描述

2型文法

在这里插入图片描述

3型文法

在这里插入图片描述

文法之间的关系

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值