第1章 编译概述 1
1.1翻译程序与编译程序 1
1.2编译过程和编译程序的基本结构 2
1.3编译程序的生成方法 5
1.4编译技术在软件开发中的应用 6
本章小结 6
扩展阅读 6
自测练习题1 7
习题1 7
第2章 文法和语言的基本知识 8
2.1概述 8
2.2字母表和符号串的基本概念 8
2.2.1字母表和符号串 8
2.2.2符号串的运算 9
2.3文法和语言的形式定义 10
2.3.1形式语言 10
2.3.2文法的形式定义 11
2.3.3语言的形式定义 14
2.3.4规范推导和规范归约 16
2.3.5递归规则与文法的递归性 17
2.4短语、直接短语和句柄 18
2.4.1短语和直接短语 18
2.4.2句柄 19
2.5语法树与文法的二义性 20
2.5.1推导和语法树 20
2.5.2文法的二义性 22
2.5.3文法二义性的消除 22
2.6文法和语言的分类 24
2.7有关文法的实用限制和变换 26
本章小结 27
扩展阅读 27
自测练习题2 28
习题2 30
第3章 词法分析与有穷自动机 32
3.1词法分析程序的功能 32
3.2单词符号及输出单词的形式 32
3.2.1语言的单词符号 33
3.2.2词法分析程序输出单词的形式 33
3.3语言单词符号的两种定义方式 34
3.3.1正规式与正规集 34
3.3.2正规文法与正规式 35
3.4正规式与有穷自动机 38
3.4.1确定有穷自动机(DFA) 38
3.4.2非确定有穷自动机(NFA) 39
3.4.3由正规表达式R构造NFA 40
3.4.4 NFA确定化为DFA的方法 41
3.4.5 DFA的化简 44
3.4.6有穷自动机到正规式的转换 46
3.5正规文法与有穷自动机 47
3.5.1右线性正规文法到有穷自动机的转换方法 47
3.5.2左线性正规文法到有穷自动机的转换方法 48
3.5.3有穷自动机到正规文法的转换方法 48
3.6词法分析程序的编写方法 49
本章小结 54
扩展阅读 55
自测练习题3 55
习题3 57
第4章 语法分析 59
4.1语法分析程序的功能 59
4.2自上而下分析法 60
4.2.1非确定的自上而下分析法的思想 60
4.2.2文法的左递归性和回溯的消除 61
4.2.3某些非LL(D)文法到LL(D)文法的改写 64
4.2.4递归下降分析法 66
4.2.5预测分析法与预测分析表的构造 68
4.3自下而上分析法的一般原理 70
4.4算符优先分析法 71
4.4.1方法概述 71
4.4.2算符优先文法的定义 72
4.4.3算符优先关系表的构造 73
4.4.4算符优先分析算法的设计 74
4.4.5优先函数的构造 77
4.4.6算符优先分析法的局限性 79
4.5 LR分析法 79
4.5.1 LR分析器的工作原理和过程 79
4.5.2 LR(0)分析法 82
4.5.3 SLR(1)分析法 86
4.5.4 LR(1)分析法 90
4.5.5 LALR(1)分析法 93
4.5.6 LR分析法对二义性文法的应用 96
4.5.7 LR语法分析中的错误恢复技术 97
本章小结 100
扩展阅读 102
自测练习题4 102
习题4 104
第5章 语法制导翻译技术和中间代码生成 107
5.1概述 107
5.2属性文法 107
5.3语法制导翻译概述 109
5.4中间语言 111
5.4.1逆波兰式 111
5.4.2三元式和树形表示 112
5.4.3四元式和三地址代码 114
5.5自下而上语法制导翻译 114
5.5.1简单算术表达式和赋值语句的翻译 114
5.5.2布尔表达式的翻译 116
5.5.3控制语句的翻译 121
5.5.4 循环语句的翻译 124
5.5.5简单说明语句的翻译 126
5.5.6含数组元素的赋值语句的翻译 126
5.5.7过程和函数调用语句的翻译 130
5.6递归下降语法制导的翻译 131
本章小结 133
扩展阅读 133
自测练习题5 133
习题5 134
第6章 符号表的组织与管理 136
6.1符号表的作用 136
6.2符号表的组织 138
6.3符号表的建立和查找 141
本章小结 143
扩展阅读 144
自测练习题6 144
习题6 144
第7章 代码优化 145
7.1优化概述 145
7.2局部优化 149
7.2.1划分基本块的方法 149
7.2.2基本块的DAG表示 149
7.2.3利用DAG进行基本块的优化处理 153
7.3循环优化 154
7.3.1程序流图与循环 155
7.3.2循环查找 156
7.3.3循环优化 158
7.4窥孔优化 162
本章小结 164
扩展阅读 164
自测练习题7 165
习题7 165
第8章 运行时的存储组织与管理 167
8.1概述 167
8.2静态存储分配 168
8.3栈式存储分配 169
8.3.1简单栈式存储分配 169
8.3.2嵌套过程的栈式存储分配 170
8.4 堆式存储分配 172
8.5临时变量的存储分配 173
本章小结 173
扩展阅读 174
自测练习题8 174
习题8 174
第9章 目标代码生成 175
9.1概述 175
9.2假想的计算机模型 175
9.3简单代码生成器 176
9.3.1待用信息与活跃信息 176
9.3.2代码生成算法 177
9.3.3寄存器的分配 179
9.4代码生成器的自动生成技术 179
本章小结 179
扩展阅读 180
自测练习题9 180
习题9 180
第10章 并行编译技术基本常识 181
10.1并行编译技术的引入 181
10.2并行编译系统的功能和结构 182
10.2.1并行编译系统的功能 182
10.2.2并行编译系统的结构 182
10.3向量语言编译技术 183
10.3.1向量语法处理 183
10.3.2向量结构优化 184
10.4共享存储器并行机并行编译技术 184
10.4.1预编译 184
10.4.2可再入的目标代码 184
本章小结 185
习题10 185
附录A词法分析程序生成器LEX 186
A.1词法分析程序生成器LEX简介 186
A.2LEX输入文件的格式 186
A.3正规表达式的LEX约定 187
A.4 LEX源程序中的规则部分 188
A.5 FLEX的命令选项 189
A.6 LEX程序示例 190
附录B语法分析程序生成器YACC 191
B.1语法分析程序YACC简介 191
B.2 YACC输入文件的格式 191
B.3 YACC各部分的书写格式 192
B.3.1定义部分 192
B.3.2规则部分 194
B.3.3辅助程序部分 196
B.4 YACC的内置名称和定义机制 196
B.5 YACC源程序示例 197
附录C编译程序实验 199
C.1词法分析 199
C.1.1实验目的 199
C.1.2实验要求 199
C.1.3词法分析程序的算法思想 200
C.1.4词法分析程序的C语言程序框架 200
C.2语法分析 206
C.2.1实验目的 206
C.2.2实验要求 206
C.2.3语法分析程序的算法思想 206
C.2.4语法分析程序的C语言程序框架 208
C.3语义分析 209
C.3.1实验目的 209
C.3.2实验要求 209
C.3.3语义分析程序的C语言程序框架 210
C.4 算符优先分析法 212
C.5实验实例 213
C.6正规式转换成自动机的图形表示 230
C.6.1 实验目的 230
C.6.2实验要求 230
C.6.3参考设计思路 230
C.6.4 参考算法 231
附录D 自测练习题与习题参考答案 234
参考文献 254