目录 1
第1章 绪论 1
1.1 编译过程概述 3
1.2 编译程序的逻辑结构 4
1.2.1 词法分析程序 5
1.2.2 语法分析程序 6
1.2.3 语义分析程序 6
1.2.5 代码优化程序 7
1.2.4 中间代码生成 7
1.2.6 目标代码生成程序 8
1.2.7 错误检查和处理程序 9
1.2.8 信息表管理程序 10
1.3 编译程序的组织 11
习题 12
第2章 前后文无关文法和语言 13
2.1 文法及语言的表示 13
2.2 文法和语言的定义 14
2.2.1 基本概念和术语 15
2.2.2 文法和语言的形式定义 16
2.3 句型的分析 22
2.3.1 规范推导和规范归约 22
2.3.2 语法树和二义性 24
2.3.3 短语和句柄 28
2.4 文法的化简和改造 30
2.4.1 无用符号和无用产生式的删除 30
2.4.2 ε-产生式的消除 32
2.4.3 单产生式的消除 34
2.5 文法和语言的Chomsky分类 35
习题 37
第3章 词法分析及词法分析程序 41
3.1 设计扫描器时应考虑的几个问题 41
3.1.1 词法分析阶段的必要性 41
3.1.2 单词符号的内部表示 42
3.1.3 识别标识符的若干约定和策略 43
3.1.4 源程序的输入及预处理 45
3.2.1 由正规文法构造状态转换图 48
3.2 正规文法和状态转换图 48
3.2.2 状态转换图的一种实现——状态矩阵法 52
3.3 有限自动机 58
3.3.1 确定的有限自动机 58
3.3.2 非确定的有限自动机 59
3.3.3 NFA与DFA的等价性 60
3.3.4 具有ε动作的FA 63
3.3.5 具有ε动作的NFA的确定化——子集法 65
3.3.6 DFA状态数的最小化 68
3.4 正规表达式与正规集 70
3.4.1 正规表达式与正规集的定义 71
3.4.2 由正规文法构造相应的正规式 72
3.4.3 由正规式构造FA——Thompson法 75
3.5 词法分析程序的实现 77
3.5.1 词法分析程序的编写 78
3.5.2 词法分析程序的自动生成 82
习题 99
上机实习题 104
第4章 语法分析和语法分析程序 106
4.1 自顶向下的语法分析 107
4.1.1 消除文法的左递归 108
4.1.2 回溯的消除及LL(1)文法 111
4.1.3 递归下降分析法 113
4.1.4 预测分析法 119
4.1.5 某些非LL(1)文法的改造 124
4.2 自底向上的语法分析 126
4.2.1 简单优先分析法 127
4.2.2 算符优先分析法 136
4.2.3 优先函数 144
4.2.4 LR分析法 150
习题 177
上机实习题 185
第5章 语法制导翻译及中间代码生成 187
5.1 引言 187
5.2 属性文法与属性翻译文法 189
5.2.1 语义属性与属性文法 190
5.2.2 属性翻译文法 193
5.3.1 逆波兰表示 197
5.3 常见中间语言简介 197
5.3.2 四元式和三元式 200
5.3.3 其它表示法 202
5.4 简单算术表达式和赋值语句的翻译 203
5.5 布尔表达式的翻译 205
5.6 程序流程控制语句的翻译 210
5.6.1 常见控制结构的翻译 210
5.6.2 FOR循环语句的翻译 216
5.6.3 语句标号及GOTO语句的翻译 219
5.6.4 情况语句的翻译 222
5.7 含数组元素的算术表达式及赋值语句的翻译 224
5.7.1 下标变量地址的计算 225
5.7.2 含有下标变量的赋值语句的翻译 227
5.8 过程说明和过程调用的翻译 229
5.8.1 过程说明的翻译 230
5.8.2 实参和形参间的信息传递 231
5.8.3 过程语句的翻译 233
5.8.4 关于形实结合的进一步讨论 234
5.9.1 类型说明(变量及数组定义)语句的翻译 236
5.9 说明语句的翻译 236
5.9.2 数据类型定义语句的翻译 239
5.10 语法分析程序的自动生成工具 241
5.10.1 LALR(1)分析器的自动生成工具——YACC和OCCS 242
5.10.2 LL(1)语法分析程序自动生成工具LLama简介 252
5.10.3 LLGen简介 254
习题 255
上机实习题 258
6.1 符号表的组织 259
第6章 符号表 259
6.2 分程序结构语言符号表的建立 263
6.3 非分程序结构语言符号表的建立 268
习题 270
第7章 运行时的存储组织与分配 272
7.1 存储组织 273
7.1.1 运行时内存的划分 273
7.1.2 活动记录 273
7.2 运行时的分配策略 274
7.2.1 静态分配 275
7.2.2 栈式分配 278
7.2.3 堆式分配 281
习题 283
第8章 代码优化 286
8.1 语法制导翻译阶段的优化 286
8.2 线性窥孔优化 287
8.2.1 强度削弱 288
8.2.2 常数合并和常数传播 289
8.2.3 无用变量与无用代码的删除 290
8.2.4 窥孔优化实例 293
8.3 基于结构信息的优化 296
8.3.1 基本块及其优化 296
8.3.2 数据流分析方法 302
8.3.3 循环优化 311
习题 327
上机实习题 332
第9章 目标代码生成 333
9.1 目标代码的形式 333
9.2 一种假想的计算机模型 335
9.3 一种代码生成程序的雏型 338
9.3.1 待用信息 338
9.3.2 寄存器描述符与地址描述符 339
9.3.3 生成目标代码的算法 340
9.4 DAG的代码生成 343
9.5 全局寄存器分配 345
习题 349
上机实习题 350
第10章 查错与改错 351
10.1 语法错误的校正 352
10.1.1 单词错误的校正 352
10.1.2 自顶向下分析中的错误校正 353
10.1.3 自底向上分析中的错误校正 356
10.2 语义错误的校正 359
10.2.1 遏止株连信息 359
10.2.2 遏止重复信息 359
习题 360
参考文献 361