第一章绪论 1
1.1编译程序概述 1
目录 1
1.2编译程序的工作过程与结构 3
1.3编译程序的开发 4
1.4构造编译程序所应掌握的内容 6
习题一 6
第二章词法分析 8
2.1词法分析器设计方法 8
2.1.1单词符号的分类与输出形式 8
2.1.2状态转换图 9
2.2一个简单的词法分析器示例 11
2.2.1 C语言子集的单词符号表示 11
2.2.2 C语言子集对应的状态转换图 12
2.2.3状态转换图的实现 13
2.3.1 正规表达式与正规集 15
2.3 正规表达式与有限自动机简介 15
2.3.2有限自动机 17
2.4 正规表达式到有限自动机的构造 19
2.4.1 由正规表达式构造等价的NFAM 19
2.4.2 NFAM的确定化 20
2.4.3 DFAM的化简 22
2.4.4 正规表达式到有限自动机构造示例 23
2.5词法分析器的自动生成 27
习题二 29
第三章语法分析 31
3.1文法和语言 31
3.1.1文法和语言的概念 31
3.1.2形式语言分类 34
3.1.3正规表达式与上下文无关文法 36
3.2推导与语法树 37
3.2.1推导与短语 37
3.2.2语法树与二义性 38
3.3.1 递归下降分析法 42
3.3 自上而下分析方法 42
3.3.2 LL(1)分析法 49
3.4自下而上分析方法 54
3.4.1 自下而上分析原理 54
3.4.2算符优先分析法 57
3.5 LR分析法 65
3.5.1 LR分析器的工作原理 65
3.5.2 LR(0)分析表的构造 68
3.5.3 SLR(1)分析表的构造 73
*3.5.4 LR(1)分析表的构造 74
*3.5.5 LALR分析表的构造 79
3.5.6二义文法的应用 81
*3.5.7 LR分析器应用拓展 85
习题三 85
4.1.2语法制导翻译方法 91
4.1.1 语义分析的概念 91
第四章语义分析和中间代码生成 91
4.1 概述 91
4.2属性文法 93
4.2.1文法的属性 93
4.2.2属性文法 94
4.3 几种常见的中间语言 95
4.3.1抽象语法树 95
4.3.2逆波兰表示法 96
4.3.3三地址代码 97
4.4表达式及赋值语句的翻译 100
4.4.1简单算术表达式和赋值语句的翻译 100
4.4.2布尔表达式的翻译 101
4.5控制语句的翻译 106
4.5.1条件语句if的翻译 106
4.5.2条件循环语句while的翻译 108
4.5.3三种基本控制结构的翻译 109
4.5.4多分支控制语句case的翻译 112
4.5.5语句标号和转移语句的翻译 114
4.6数组元素的翻译 115
4.6.1 数组元素的地址计算及中间代码形式 115
4.6.2赋值语句中数组元素的翻译 115
4.6.3数组元素翻译示例 117
4.7 过程或函数调用语句的翻译 120
4.7.1过程调用的方法 120
4.7.2过程或函数调用语句的四元式生成 121
4.8说明语句的翻译 121
4.8.1变量说明的翻译 121
4.8.2数组说明的翻译 122
4.9 递归下降语法制导翻译方法简介 123
习题四 124
5.1.1基本块的划分方法 127
5.1 局部优化 127
第五章代码优化 127
5.1.2基本块的DAG表示 128
5.1.3利用DAG进行基本块的优化处理 132
5.1.4 DAG构造算法的进一步讨论 133
5.2循环优化 134
5.2.1程序流图与循环 134
5.2.2循环的查找 136
5.2.3循环优化 140
5.3代码优化示例 148
习题五 152
第六章运行时存储空间组织 156
6.1静态存储分配 156
6.2简单的栈式存储分配 157
6.2.1栈式存储分配与活动记录 158
6.2.2过程的执行 159
6.3.1 嵌套层次显示表(DISPLAY)和活动记录 162
6.3嵌套过程语言的栈式实现 162
6.3.2嵌套过程的执行 163
6.3.3访问非局部名的另一种实现方法 164
6.4堆式动态存储分配 168
6.4.1堆式存储的概念 168
6.4.2 堆式存储管理的方法 168
*6.5参数传递补遗 170
6.5.1参数传递的方法 171
6.5.2不同参数传递方法的比较 172
习题六 173
第七章 目标代码生成 176
7.1一个简单代码生成器 176
7.1.1待用信息与活跃信息 177
7.1.2代码生成算法 179
7.1.3寄存器分配 180
7.1.4源程序到目标代码生成示例 182
*7.2汇编指令到机器代码的翻译概述 185
习题七 191
第八章符号表与错误处理 193
8.1 符号表 193
8.1.1符号表的作用 193
8.1.2符号表的组织 194
8.1.3分程序结构语言的符号表建立 195
8.1.4非分程序结构语言的符号表建立 198
8.1.5常用符号表结构 199
8.1.6符号表的内容 200
8.2错误处理 201
8.2.1语法错误的校正 201
8.2.2语义错误的校正 207
习题八 209
附录1 8086/8088指令码汇总表 211
附录2 8086/8088指令编码空间表 216
参考文献 218