第1章 编译程序概述 1
1.1 高级语言概述 1
1.2 编译程序 2
1.2.1 编译程序与解释程序 2
1.2.2 编译程序的工作过程 3
1.3 编译程序的结构 8
1.3.1 编译程序结构简介 8
1.3.2 符号表管理 10
1.3.3 出错处理 10
1.3.4 遍的概念 11
1.4 C语言编译器 12
1.5 编译程序的生成 13
1.6 小结 14
习题1 15
第2章 高级语言的语法描述 16
2.1 程序语言的定义 16
2.1.1 语法 16
2.1.2 语义 17
2.2 程序语言的语法基础 18
2.2.1 文法的讨论 18
2.2.2 符号和符号串 20
2.2.3 文法和语言的形式定义 22
2.2.4 语法分析树和二义性 26
2.3 C语言与文法 30
2.4 形式语言简介 30
2.5 小结 35
习题2 35
第3章 词法分析 37
3.1 词法分析器的功能及机内表示 37
3.1.1 词法分析器的功能 37
3.1.2 单词的机内表示 38
3.2 单词的描述方法 39
3.2.1 正规文法 39
3.2.2 正规表达式 40
3.3 词法分析器的设计 42
3.3.1 设计词法分析器需要考虑的主要问题 42
3.3.2 符号表 44
3.3.3 错误处理 45
3.3.4 词法分析器的设计工具 46
3.3.5 状态转换图的实现 49
3.4 有限自动机简介 50
3.4.1 确定有限自动机 52
3.4.2 非确定有限自动机 54
3.4.3 正规式、正规文法和有限自动机之间的关系 54
3.4.4 由正规式构造NFA、NFA确定化为DFA、DFA化简 62
3.4.5 确定的有限自动机化简 70
3.5 词法分析程序的自动产生 72
3.5.1 语言LEX的一般描述 73
3.5.2 LEX的实现 75
3.6 (C语言小子集)词法分析程序设计 78
3.7 正规(则)表达式的应用 80
3.8 小结 81
习题3 81
第4章 语法分析 84
4.1 语法分析程序的功能 84
4.2 语法成分的表示 84
4.3 语法分析——自上而下分析 85
4.3.1 自上而下分析的基本问题 86
4.3.2 递归下降分析 96
4.3.3 LL(1)分析法 99
4.4 语法分析——自下而上分析 106
4.4.1 自下而上分析的基本问题 106
4.4.2 规范归约简述 109
4.4.3 符号栈的使用与语法树的表示 112
4.4.4 算符优先分析 113
4.4.5 LR分析法 126
4.5 语法分析器的自动产生工具YACC 145
4.6 小结 149
习题4 150
第5章 语义分析与中间代码的生成 153
5.1 语义分析的功能 153
5.2 属性文法 154
5.2.1 属性的类型 154
5.2.2 属性文法的分类 158
5.3 中间代码及其分类 158
5.3.1 后缀式 159
5.3.2 图表示 159
5.3.3 三地址代码 163
5.4 典型语句的分析与翻译 168
5.4.1 过程中的说明语句 168
5.4.2 赋值语句 170
5.4.3 布尔表达式翻译方法 177
5.4.4 控制语句的翻译 187
5.4.5 过程语句的翻译 192
5.5 小结 195
习题5 195
第6章 运行环境与符号表 197
6.1 运行环境 197
6.1.1 存储分配的方法 198
6.1.2 静态存储分配 198
6.1.3 栈(stack)式动态存储分配 198
6.1.4 堆(heap)式动态存储分配 204
6.2 符号表 205
6.2.1 符号表的组织与内容 206
6.2.2 符号表的查填方法 208
6.3 小结 212
习题6 213
第7章 编译优化 214
7.1 优化的基本概念 214
7.2 局部优化 222
7.3 循环优化 229
7.4 小结 237
习题7 238
第8章 目标代码的生成与算法 239
8.1 基本问题 239
8.1.1 代码生成器的输入 239
8.1.2 目标程序 240
8.1.3 指令选择 240
8.1.4 寄存器分配 241
8.1.5 计算顺序选择 242
8.2 目标计算机模型 242
8.3 一个简单的代码生成器 243
8.3.1 待用信息和活跃信息 244
8.3.2 寄存器描述和地址描述 249
8.3.3 目标代码生成算法 249
8.3.4 代码生成算法 252
8.4 寄存器分配 255
8.5 小结 256
习题8 256
参考文献 257