目录 1
编委会 1
总序 1
前言 1
第1章 引论 1
1.1 程序设计语言 1
1.1.1 概述 1
1.1.2 程序设计语言的语法、语义与语用 2
1.2 源程序的执行途径 5
1.3 编译程序的结构 7
1.3.1 编译程序的构造 7
1.3.2 趟的概念 10
1.3.3 编译程序的分类 11
习题 12
第2章 形式语言初步 13
2.1 文法和语言 13
2.1.1 符号与符号串 13
2.1.2 文法和语言 15
2.1.3 文法的分类 18
2.1.4 语法树和二义性 20
2.1.5 句型分析 22
2.1.6 文法的使用限制 26
2.1.7 正则表达式和正则文法 27
2.2 自动机 29
2.2.1 状态转换图 29
2.2.2 确定有限自动机(DFA) 30
2.2.3 不确定有限自动机(NFA) 32
2.2.4 NFA确定化为DFA 33
2.2.5 DFA的化简 37
2.2.6 正则式和有限自动机的等价性 40
2.2.7 正则文法和有限自动机间的转换 43
习题 46
第3章 词法分析 48
3.1 词法分析器 48
3.1.1 功能 48
3.1.2 单词的分类与描述 48
3.1.3 实现形式 52
3.2 词法分析器的设计 53
3.3 词法分析器的自动构造工具 58
习题 63
第4章 自上而下语法分析 65
4.1 自上而下语法分析的基本思想 65
4.2 LL(1)文法 67
4.3 将某些非LL(1)文法转换为LL(1)文法 69
4.3.1 左递归的消除 69
4.3.2 提取公共左因子 71
4.4 递归下降分析法 74
4.5 LL(1)分析器 76
4.5.1 LL(1)分析器的逻辑结构和实现过程 76
4.5.2 预测分析表的构造 79
习题 80
第5章 自下而上语法分析 81
5.1 自下而上语法分析方法的基本思想 81
5.1.1 自下而上优先分析法 82
5.1.2 简单优先分析法 82
5.1.3 算符优先分析法简介 85
5.2 算符优先文法 86
5.3 算符优先关系表的构造 87
5.4 算符优先分析算法 92
5.5 优先函数 94
5.6 算符优先分析法的局限性 96
习题 97
第6章 LR语法分析 98
6.1 LR分析概述 98
6.2.1 活前缀 102
6.2 LR(0)分析 102
6.2.2 识别活前缀的有限自动机 103
6.2.3 LR(0)项目集规范族的构造 107
6.2.4 LR(0)分析表的构造 109
6.3 SLR(1)分析 110
6.4 LR(1)分析 113
6.5 LALR(1)分析 116
6.6 二义文法的应用 119
习题 122
7.1 语法制导翻译 124
第7章 语义分析与中间代码产生 124
7.1.1 语法制导定义 125
7.1.2 综合属性 126
7.1.3 继承属性 127
7.1.4 依赖图 128
7.1.5 S属性的定义与自下而上计算 129
7.1.6 L属性的定义与翻译方案 132
7.2.1 逆波兰表示 136
7.2 中间语言 136
7.2.2 三元式 137
7.2.3 语法树 138
7.2.4 四元式 139
7.3 简单赋值语句的翻译 139
7.4 布尔表达式的翻译 141
7.4.1 布尔表达式的翻译 142
7.4.2 控制语句中布尔表达式的翻译 143
7.5 控制语句的翻译 147
7.5.1 goto语句的翻译 147
7.5.2 条件语句的翻译 148
7.5.3 case语句的翻译 149
7.5.4 for循环语句的翻译 151
7.6 说明语句的翻译 152
7.7 数组说明和数组元素引用的翻译 154
7.8 过程说明和过程调用的翻译 156
习题 158
8.1 存储组织 159
8.1.1 运行时内存的划分 159
第8章 运行时的存储组织与分配 159
8.1.2 活动记录 160
8.2 运行时的分配策略 161
8.2.1 静态存储分配 161
8.2.2 栈式存储分配 164
8.2.3 堆式存储分配 169
习题 171
第9章 代码优化 172
9.1 代码优化概述 172
9.1.1 优化的概念 172
9.1.2 代码优化的分类 173
9.1.3 代码优化程序的结构 176
9.2 基本块与流图 177
9.3 基本块的优化 179
9.3.1 基本块DAG的构造 179
9.3.2 基本块DAG的应用 185
9.4 循环优化 186
9.4.1 循环优化的种类 186
9.4.2 循环优化的实现 190
9.5 窥孔优化 198
9.5.1 冗余指令序列 199
9.5.2 控制流优化 200
9.5.3 代码化简 201
9.5.4 特殊指令的使用 201
9.6 习题 201
第10章 代码生成 203
10.1 目标代码的形式 203
10.2 寄存器与临时单元的管理 204
10.3 一种代码生成程序的雏形 205
10.4 代码生成器的自动化技术 209
10.5 习题 212
第11章 编译原理的发展和实现技术 213
11.1 面向对象语言的编译 213
11.1.1 面向对象语言的概念 213
11.1.2 方法的编译 219
11.1.3 编译继承性的方案 221
11.2 其他的编译程序实现技术 227
11.2.1 编译程序的语言表示 227
11.2.2 编译程序的自展技术 227
11.2.3 编译程序的移植技术 228
11.2.4 编译程序的构造工具 229
11.3 PL/0编译程序 231
11.3.1 PL/0语言的文法规则 231
11.3.2 PL/0编译程序的功能 233
11.3.3 PL/0编译程序的有关过程及函数 235
11.3.4 PL/0编译程序文本及主要参数 237
第12章 编译实验 263
部分习题解答 277
参考文献 289