第1章 概论 1
1.1 程序设计语言及编译程序 1
1.2 编译过程和编译程序结构 2
1.3 编译程序的实现途径 6
习题1 9
第2章 文法和形式语言 10
2.1 符号和符号串 10
2.2 文法和语言 12
2.3 语法树和二义性 21
2.4 文法的扩充BNF表示和语法图 27
2.5 文法的实用限制 30
2.6 文法和语言的分类 38
2.7 正则表达式与正则集 42
习题2 45
第3章 有限自动机 49
3.1 状态转换图 49
3.2 确定有限自动机 51
3.3 非确定有限自动机及其确定化 53
3.4 ε-自动机及其非ε化 57
3.5 自动机的简化 58
3.6 正则表达式、正则文法与有限自动机的相互转换 63
习题3 67
第4章 符号表 70
4.1 符号表的地位及作用 70
4.2 单词的属性及符号表的内容 71
4.3 符号表的组织 74
4.4 符号表的管理 78
习题4 79
第5章 词法分析 80
5.1 引言 80
5.2 源程序的输入及预处理 81
5.3 单词的表示和词法分析程序的实现 82
5.4 词法分析程序的自动生成 88
习题5 93
第6章 语法分析(1) 94
6.1 常用终结符号集 94
6.2 语法分析方法概述 97
6.3 递归子程序法 102
6.4 LL(1)分析法 109
6.5 算符优先分析法 116
习题6 124
第7章 语法分析(2)——LR(K)分析方法 126
7.1 LR分析方法概述 126
7.2 活前缀与可归前缀 129
7.3 LR(0)分析法 132
7.4 SLR(1)分析法 139
7.5 LR(1)分析法 142
7.6 LALR(1)分析法 146
习题7 149
第8章 常用中间语言 150
8.1 逆波兰表示 150
8.2 四元式 154
8.3 三元式 157
8.4 树表示 160
习题8 161
第9章 语法制导翻译与中间代码生成 164
9.1 语法制导翻译概述 164
9.2 简单算术表达式和赋值语句的翻译 169
9.3 布尔表达式的翻译 173
9.4 控制语句的翻译 178
9.5 过程调用语句的翻译 191
9.6 简单说明语句的翻译 193
习题9 194
第10章 运行时的存储组织与分配 197
10.1 存储组织概述 197
10.2 静态存储分配 198
10.3 栈式存储分配 200
10.4 堆分配 207
10.5 参数传递 208
习题10 210
第11章 代码优化 214
11.1 优化技术概述 214
11.2 局部优化 215
11.3 控制流分析和循环优化 218
11.4 数据流分析与全局优化简介 224
习题11 225
第12章 目标代码生成 227
12.1 概述 227
12.2 一个计算机的模型 228
12.3 一个简单的代码生成程序 230
习题12 234
第13章 错误的诊察和处理 235
13.1 错误的诊察和处理概述 235
13.2 词法分析阶段的查错处理 236
13.3 语法分析阶段的查错处理 237
13.4 语义错误的处理 238
习题13 239
附录 TINY编译器 240
Ⅰ TINY程序设计语言简介 240
Ⅱ TINY语言的文法规则 241
Ⅲ TINY语言的编译技术 242
Ⅳ 关于TINY编译器的源程序文本 247
参考文献 249