目录


模块1引论和基本概念
第1章引论3
1.1编译器技术的应用4
1.1.1高级语言的实现4
1.1.2针对计算机体系结构的优化6
1.1.3新计算机体系结构的设计7
1.1.4程序翻译8
1.1.5编译器相关的建模及科学9
1.1.6程序设计语言的部分特性11
1.1.7提高软件开发效率的工具18
1.2编译器概述20
1.2.1词法分析21
1.2.2语法分析22
1.2.3语义分析23
1.2.4中间代码生成23
1.2.5代码优化24
1.2.6代码生成24
1.2.7符号表管理25
1.2.8阶段的分组25
1.2.9解释器26
1.2.10编译器的生成与构造27
小结29
习题130
拓展阅读: 深度学习编译器30第2章文法和语言34
2.1预备知识35
2.1.1字母表35
2.1.2符号串35
2.2文法的非形式讨论36
2.3文法和语言的形式定义40
2.4语法树与二义性文法42
2.4.1语法树的概念42
2.4.2二义性与最左(最右)推导42
2.4.3子树与短语、句柄43
2.4.4抽象语法树46
2.5句子的分析47
2.6有关文法的实用限制49
2.7文法的其他表示法: EBNF和语法图50
2.8文法和语言的分类52
2.9文法构造与文法化简56
2.9.1由语言构造文法的例子56
2.9.2文法的化简59
2.9.3构造无ε产生式的上下文无关文法60
小结62
习题263
拓展阅读: 非乔姆斯基的两种语法与Chart分析算法65
模块2编译器的构造技术
第3章词法分析概述及词法分析器的人工实现73
3.1词法单元及属性73
3.1.1词法单元、模式、词素73
3.1.2词法单元的属性74
3.1.3词法错误 75
3.2输入缓冲75
3.2.1缓冲区对76
3.2.2哨兵标记77
3.3词法单元的描述与识别78
3.3.1串和语言78
3.3.2正则表达式79
3.3.3正则定义81
3.3.4正则文法和正则式的等价性82
3.3.5状态转换图83
小结87
习题387
拓展阅读: 正则表达式的扩展与汉语词法分析89第4章语法分析概述及递归子程序法94
4.1语法分析概述94
4.1.1上下文无关文法的定义95
4.1.2推导96
4.1.3分析树97
4.1.4二义性98
4.1.5验证文法生成的语言100
4.1.6非上下文无关语言的构造100
4.2自上而下分析101
4.2.1自上而下分析的一般方法102
4.2.2存在问题及解决方法106
4.3递归下降分析法107
小结 110
习题4110
拓展阅读: 递归子程序的应用112第5章符号表管理115
5.1概述115
5.2符号表的组织和内容116
5.3非分程序结构语言的符号表组织119
5.4分程序结构语言的符号表组织120
小结121
习题5122
拓展阅读: Open64的符号表设计123第6章运行时存储空间的组织和管理129
6.1概述129
6.2静态存储分配131
6.3动态存储分配132
6.4面向对象语言的存储分配策略141
6.4.1类和对象141
6.4.2面向对象程序运行时的特征141
6.4.3对象的存储组织142
6.4.4例程的动态绑定143
小结145
习题6146
拓展阅读: 垃圾回收152第7章源程序的中间形式157
7.1波兰表示158
7.2n元表示159
7.2.1四元式161
7.2.2三元式161
7.2.3静态单赋值形式162
7.3图形表示163
7.3.1抽象语法树163
7.3.2有向无环图164
7.4抽象机代码166
小结167
习题7168
拓展阅读: LLVM和LLVM IR170第8章错误处理172
8.1概述172
8.2错误分类173
8.3错误的诊察和报告174
8.4错误处理技术174
8.4.1词法错误的恢复和校正176
8.4.2语法错误的恢复和校正176
8.4.3语义错误的恢复和校正177
小结178
习题8179
拓展阅读: 中文错误处理179第9章语法制导翻译技术181
9.1翻译文法和语法制导翻译182
9.2属性翻译文法185
9.3自上而下语法制导翻译190
9.3.1递归下降翻译器191
9.3.2LL(1)翻译器195
小结198
习题9199
拓展阅读: 前沿语法制导翻译技术200第10章语义分析和代码生成202
10.1语义分析的概念203
10.2栈式抽象机及其汇编指令204
10.3声明的处理207
10.3.1符号常量的处理207
10.3.2简单变量的处理208
10.3.3数组的处理210
10.4表达式的处理211
10.5赋值语句的处理215
10.6控制语句的处理217
10.6.1if语句的处理217
10.6.2while语句的处理219
10.6.3for语句的处理221
10.7过程调用和返回的处理223
小结227
习题10228
拓展阅读: 自然语言处理229
模块3编译前段分析及其自动化生成技术
第11章词法分析器的自动生成技术233
11.1有限自动机233
11.1.1不确定的有限自动机235
11.1.2确定的有限自动机237
11.1.3NFA到DFA的转换238
11.1.4DFA的化简242
11.2从正则表达式到有限自动机243
11.3从正则文法到有限自动机248
11.4词法分析器生成工具Lex249
小结252
习题11253
拓展阅读: 有限自动机的应用257第12章语法分析及自动生成技术261
12.1自上而下分析261
12.1.1自上而下分析的一般方法262
12.1.2消除左递归264
12.1.3提取左公因子266
12.1.4LL(1)文法266
12.1.5递归下降的预测分析268
12.1.6非递归的预测分析269
12.1.7构造分析表271
12.1.8预测分析的错误恢复272
12.2自下而上分析275
12.2.1归约275
12.2.2句柄276
12.2.3用栈实现移进归约分析277
12.2.4移进归约分析的冲突278
12.3自下而上优先分析279
12.3.1简单优先分析法279
12.3.2运算符优先分析法282
12.3.3运算符优先分析算法290
12.3.4优先函数292
12.3.5运算符优先分析法的局限性296
小结297
习题12298
拓展阅读: 实际应用中语法分析器所面临的困境302第13章自下而上语法分析——LR(k)分析方法309
13.1LR分析器310
13.1.1LR分析算法310
13.1.2LR文法和LR分析方法的特点318
13.2SLR分析319
13.3规范的LR分析322
13.3.1规范LR(1)项322
13.3.2构造LR(1)项集族323
13.3.3规范LR(1)语法分析表325
13.4LALR分析327
13.4.1LALR分析表的构造327
13.4.2高效构造LALR语法分析表的方法330
13.5非二义且非LR的上下文无关文法334
13.5.1用优先级和结合性解决冲突335
13.5.2悬空else的二义性337
13.6语法分析表的自动生成339
13.6.1终结符和产生式的优先级339
13.6.2结合规则339
13.6.3LR语法分析表的安排342
13.7语法分析器的生成器343
13.7.1分析器的生成器yacc343
13.7.2用yacc处理二义文法346
13.7.3yacc的错误恢复348
小结349
习题13350
拓展阅读: GLR算法与基于统计的语法分析算法353参考文献358