第1章 引论 1
1.1 什么是编译程序 1
1.2 编译程序的基本结构 2
1.3 编译程序的组织 6
习题 8
第2章 文法和语言 9
2.1 字母表和符号串 9
2.2 文法和语言的形式定义 11
2.3 语法树和文法的二义性 16
2.4 文法的类型 19
习题 21
第3章 词法分析 23
3.1 有穷自动机 23
3.2 正规集、正规文法和正规式 29
3.3 正规文法与有穷自动机 33
3.4 正规式与NFA 35
3.5 DFA的化简 38
3.6 单词的分类表示 41
3.7 词法分析器的任务与设计考虑 42
3.8 词法分析器的设计与实现 43
习题 46
第4章 自顶向下的语法分析 49
4.1 左递归和回溯 49
4.2 FIRST和FOLLOW集合的构造 53
4.3 LL(1)文法 57
4.4 LL(1)分析法 59
4.5 递归下降法 62
习题 65
第5章 自底向上的语法分析 68
5.1 自底向上语法分析概述 68
5.2 短语、直接短语及句柄 70
5.3 简单优先分析法 71
5.4 算符优先分析法 75
习题 89
第6章 自底向上的LR分析法 92
6.1 LR分析的基本原理 92
6.2 LR分析器的逻辑结构 93
6.3 LR(0)分析表的构造 94
6.4 SLR分析表的构造 101
6.5 LR分析器总控程序 105
6.6 LR(1)分析表的构造 108
6.7 LALR(1)分析表的构造 112
习题 114
第7章 语法制导翻译与中间代码生成 117
7.1 属性文法 118
7.2 自底向上语法制导翻译概述 119
7.3 中间代码 122
7.4 简单说明语句的翻译 125
7.5 简单算术表达式和赋值语句的翻译 126
7.6 布尔表达式的翻译 128
7.7 控制流语句的翻译 133
7.8 含数组元素的赋值语句和说明语句的翻译 137
7.9 过程调用和返回语句的翻译 145
7.10 开关语句的翻译 146
7.11 结构说明的翻译 148
7.12 参数的传递 149
习题 152
第8章 运行时的存储管理 155
8.1 存储组织 155
8.2 静态存储分配 157
8.3 栈式存储分配 158
8.4 堆式存储分配 166
习题 167
第9章 符号表 169
9.1 符号表的作用 169
9.2 符号表的主要属性 169
9.3 符号表的组织 170
9.4 分程序结构符号表的管理 173
习题 174
第10章 代码优化 176
10.1 基本块与程序控制流图 176
10.2 局部优化 178
10.3 循环优化 183
10.4 数据流分析与全局优化 193
习题 205
第11章 目标代码生成 207
11.1 目标代码的形式 207
11.2 目标机器 207
11.3 一个简单的代码生成器 209
11.4 寄存器分配 214
11.5 DAG的代码生成 218
习题 220
第12章 词法分析程序生成器LEX 221
12.1 LEX概述 221
12.2 LEX源文件的格式 222
12.3 识别规则的二义性 225
12.4 上下文相关性的处理 225
第13章 语法分析程序生成工具YACC 228
13.1 YACC概述 228
13.2 YACC源文件的格式 228
13.3 冲突的处理 236
13.4 出错处理 237
第14章 面向对象语言的编译 239
14.1 面向对象语言的基本概念 239
14.2 面向对象语言语法结构及语义 242
14.3 实例变量、多态引用的类型检查及绑定 247
14.4 对象的存储管理及废弃单元回收 249
参考文献 252