第1章 编译程序理论概述 1
1.1 导言 1
1.2 语言及其翻译 1
1.3 语法的功能 3
1.4 程序设计语言的发展 4
1.5 编译程序的结构 6
1.5.1 词法分析 7
1.5.2 字符串表 9
1.5.3 语法分析 9
1.5.4 语义分析 10
1.5.5 符号表 10
1.5.6 代码优化程序 10
1.5.7 代码生成程序 11
1.6 特殊约定 12
缩写词与关键字 12
习题 12
第2章 语法及其分类 14
2.1 概述 14
2.2 文法 14
2.2.1 字母表与字符串 14
2.2.2 非终结符与产生式 15
2.2.3 文法的例子 15
2.3 文法及语言的Chomskey分类 17
2.4 规范推导 18
2.5 文法的二义性 19
习题 20
第3章 扫描器与正规语言 22
3.1 词法分析程序简介 22
3.2 正规表达式 22
3.2.1 正规表达式代数 23
3.2.2 正规表达式的性质 24
3.3 有限状态自动机 27
3.4 非确定的有限状态自动机 29
3.5 将正规文法转换为自动机 30
3.6 NDFA的确定化及化简 33
3.7 从有限状态自动机转换到正规文法 40
3.8 有限自动机在计算机中的实现 40
3.9 扫描器实现中的特殊问题 42
3.9.1 输入符号表 42
3.9.2 扫描器自动机中的终止状态 42
3.9.3 删除空白符号与注释 43
3.9.4 输出单词 43
3.10 字符串表的实现 46
3.11 保留字 47
3.12 使用扫描器自动生成工具 48
缩写词与关键字 48
习题 48
第4章 语法分析与前后文无关文法 51
4.1 导论 51
4.2 下推自动机 51
4.2.1 停机条件的等价性 53
4.2.2 从前后文无关文法CFG构造PDA 54
4.3 LL(k)规范文法 55
4.3.1 FIRST集与FOLLOW集 56
4.3.2 选择集合 58
4.4 文法的左递归性 59
4.5 公共左因子 60
4.6 用正规表达式运算符拓广CFG 61
4.7 递归下降分析程序 62
4.8 作为下推自动机的递归下降分析程序 64
4.9 自底向上的语法分析器的构造 66
4.9.1 自底向上的语法分析 66
4.9.2 LR(k)分析法 69
4.10 错误的发现 84
4.11 使用语法分析器生成工具 85
关键字 86
习题 86
第5章 语义分析与属性文法 88
5.1 引言 88
5.2 属性文法AG 88
5.2.1 继承属性和综合属性 90
5.2.2 属性值流 93
5.3 非终结符号作为属性计值函数 94
5.4 符号表作为属性 95
5.5 一个微Pascal语言的属性文法AG 96
5.6 域和标识符种类 98
5.6.1 标识符作用域文法 99
5.6.2 标识符作用域例子的分析 100
5.6.3 符号表的其他事项 104
5.7 在递归下降分析中实现属性 105
5.8 LR分析器的属性赋值 106
5.9 实现一个符号表 107
符号 109
关键字 109
习题 109
第6章 语法制导的代码生成 111
6.1 引言 111
6.2 常见的中间语言简介 111
6.2.1 逆波兰表示 112
6.2.2 四元式 113
6.2.3 其他表示法 114
6.3 赋值语句的翻译 114
6.4 布尔表达式的翻译 116
6.5 程序流程控制语句的翻译 122
6.5.1 常见控制结构的翻译 122
6.5.2 语句标号及GOTO语句的翻译 126
6.5.3 多分支语句的翻译 130
6.6 含数组元素的算术表达式及赋值语句的翻译 132
6.6.1 下标变量地址的计算 133
6.6.2 含有下标变量的赋值语句的翻译 136
6.7 过程说明和过程调用的翻译 139
6.7.1 过程说明的翻译 139
6.7.2 实参和形参间的信息传递 140
6.7.3 过程语句的翻译 141
6.7.4 关于形实结合的进一步讨论 142
6.8 说明语句的翻译 144
6.8.1 类型说明(变量及数组定义)语句的翻译 144
6.8.2 数据类型定义语句的翻译 147
习题 150
第7章 符号表 152
7.1 引言 152
7.2 符号表的组织 152
7.3 符号表结构 153
7.3.1 线性符号表 153
7.3.2 有序符号表 154
7.3.3 散列表 155
7.4 符号表的管理 157
7.4.1 符号表的初始化 157
7.4.2 符号表的查填 157
7.4.3 符号表的删除 158
关键字 158
习题 158
第8章 运行时存储空间的组织与管理 161
8.1 引言 161
8.2 语言相关概述 161
8.2.1 过程 161
8.2.2 名字的作用域和绑定 162
8.3 存储分配的策略 163
8.3.1 静态存储分配策略 164
8.3.2 栈式存储分配策略 166
8.3.3 堆式存储分配策略 170
8.4 FORTRAN语言的存储分配 173
关键字 174
习题 174
第9章 代码优化 180
9.1 概述 180
9.2 局部优化 181
9.2.1 基本块的划分 181
9.2.2 基本块的优化 182
9.2.3 基本块的DAG图表示 183
9.3 循环优化 189
9.3.1 程序流图的概念 190
9.3.2 循环优化方法 190
第10章 目标代码生成 194
10.1 概述 194
10.2 一个简单的计算机模型 196
10.3 一个简单的代码生成器 197
10.3.1 变量的待用信息及其算法 198
10.3.2 代码生成算法 200
10.4 寄存器分配 204
10.5 窥孔优化 205
参考文献 208