第一章 引论
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的集合的符号串
β是终结符和非终结符构成的长度任意的符号串
一般约定
- 第一条产生式的左部是
开始符
- 用尖括号括起来的是
非终结符
- 用大写字母表示
非终结符
- 不用尖括号括起来的是
终结符
- 用小写字母表示
终结符