第1章 总论 1
1. 1引言 1
1.2程序设计语言与程序 3
1.2.1程序及其结构 3
1.2.2程序设计语言的定义 4
1.2.3程序的执行 7
1.3编译程序构造及有关概念 9
1.3.1编译程序的构造 9
1.3.2遍的概念 11
1.3.3编译程序的分类 12
1.3.4实际应用中的编译程序 13
1.4形式语言理论与编译实现技术 15
本章概要 15
第2章 文法与语言 17
2.1符号串与符号串集合 17
2.1.1字母表 17
2.1.2符号串 17
2.1.3符号串集合 19
2.2文法与语言的形式定义 20
2.2.1文法的形式定义 20
2.2.2语言的形式定义 31
2.3语言的分类 35
2.3.1 Chomsky文法类和语言类 35
2.3.2 形式语言与自动机 35
2.3.3形式语言的分类与程序设计语言 44
2.3.4对上下文无关文法的进一步讨论 45
2.4文法等价与等价变换 47
2.4.1文法等价的概念 47
2.4.2压缩文法等价变换 48
2.4.3消去左递归的文法等价变换 51
2.5语法分析树与句型分析 55
2.5.1语法分析树的概念 55
2.5.2句型分析 61
本章概要 65
习题1 65
习题2 66
习题3 66
习题4 67
习题5 67
第2章上机实习题 68
第3章 词法分析 69
3.1引言 69
3.1.1词法分析与词法分析程序 69
3.1.2符号的识别与重写规则的关系 69
3.1.3实现方式 70
3.2正则表达式与有穷状态自动机 71
3.2.1状态转换图 71
3.2.2确定有穷状态自动机DFA 75
3.2.3非确定有穷状态自动机NFA 78
3.2.4确定有穷状态自动机的化简 84
3.2.5正则表达式 86
3.3词法分析程序的实现 89
3.3.1符号与属性字 89
3.3.2标识符的处理 94
3.3.3词法分析程序的编写 100
3.4词法分析程序的自动生成 105
3.4.1基本思想 105
3.4.2扫描程序定义与构造程序 111
3.4.3自动生成系统LEX简介 114
本章概要 115
习题6 116
第3章上机实习题 117
第4章 语法分析——自顶向下分析技术 119
4.1引言 119
4.1.1自顶向下分析技术及识别算法 119
4.1.2讨论的前提 119
4.1.3要解决的基本问题 120
4.2带回溯的自顶向下分析技术 121
4.2.1基本思想 121
4.2.2语法分析树的建立及其表列表示 123
4.2.3问题及其解决 124
4.3无回溯的自顶向下分析技术 125
4.3.1先决条件 125
4.3.2递归下降分析技术 125
4.3.3预测分析技术 132
本章概要 142
习题7 143
第4章上机实习题 143
第5章 语法分析——自底向上分析技术 145
5.1引言 145
5.1.1自底向上分析技术及识别算法 145
5.1.2讨论前提 145
5.1.3基本实现方法:移入-归约法 146
5.2算符优先分析技术 148
5.2.1算符优先分析技术的引进 148
5.2.2算符文法 148
5.2.3算符优先关系与算符优先文法 150
5.2.4算符优先文法句型的识别 154
5.2.5优先函数 158
5.2.6实际应用中的算符优先分析技术 168
5.3 LR(k)分析技术 170
5.3.1 LR(k)文法与LR(k)分析技术 170
5.3.2 SLR(k)分析表构造方法 182
5.3.3 LALR(k)分析表构造方法 196
5.3.4识别程序自动构造 201
5.3.5识别程序自动生成系统YACC简介 205
5.4 LR(1)识别程序句型分析的实现 207
本章概要 210
习题8 211
习题9 212
习题10 212
第5章上机实习题 213
第6章 语义分析与目标代码生成 214
6.1概况 214
6.1.1语义分析的概念 214
6.1.2属性文法 216
6.1.3类型体制与语义分析 233
6.2说明部分的翻译 241
6.2.1常量定义的翻译 242
6.2.2变量说明的翻译 242
6.2.3函数定义的翻译 244
6.2.4结构体类型的翻译 247
6.3目标代码的生成 248
6.3.1概况 248
6.3.2虚拟机 251
6.3.3控制语句的翻译 253
6.4语义分析的实现考虑 283
6.4.1注释分析树的构造 283
6.4.2语义动作的实现 288
6.4.3语义子程序的例子 295
6.5源程序的中间表示代码 296
6.5.1抽象语法树 297
6.5.2逆波兰表示 300
6.5.3四元式序列 306
6.5.4三元式序列 315
本章概要 316
习题11 317
习题12 317
习题13 318
习题14 319
第6章上机实习题 320
第7章 运行环境 321
7.1引言 321
7.1.1相关的问题 321
7.1.2名字到存储字的结合 321
7.2存储分配策略 325
7.2.1静态存储分配 325
7.2.2栈式存储分配 326
7.2.3堆式存储分配 329
7.3寄存器分配 332
7.3.1使用图着色方法进行寄存器分配的思路 332
7.3. 2例子 333
7.3.3若干问题讨论 335
7.4符号表 336
7.4.1符号表的引进 336
7.4.2符号表的组织 337
7.4.3符号表的数据结构 341
7.5运行时刻支持系统 344
本章概要 345
习题15 346
第8章 代码优化 348
8.1引言 348
8.1.1优化的概念 348
8.1.2代码优化的分类 349
8.1.3代码优化程序的结构 350
8.2基本块与流图 351
8.3基本块的优化 352
8.3.1基本块优化的种类 352
8.3.2基本块优化的实现 356
8.4与循环有关的优化 365
8.4.1循环优化的种类 366
8.4.2循环优化的实现 373
8.5窥孔优化 395
8.5.1冗余指令删除 395
8.5.2控制流优化 397
8.5.3代数化简 398
8.5.4特殊指令的使用 398
本章概要 398
习题16 399
第8章上机实习题 401
第9章 程序错误的检查和校正 402
9.1概述 402
9.1.1错误存在的必然性 402
9.1. 2错误的种类 402
9.1.3错误复原 404
9.2词法错误的复原和校正 405
9.2.1词法错误的种类 405
9.2.2词法错误的校正 405
9.3语法错误的复原和校正 406
9.3.1语法错误的复原 406
9.3.2语法错误的校正 407
9.4语义错误 408
9.4.1语义错误的种类 408
9.4.2语义错误检查措施 409
本章概要 411
解题规范例解 412
总复习思考题 439
参考文献 441