第一章 概论 1
1.1 程序语言和语言处理程序 1
1.1.1 程序语言 1
1.1.2 语言处理程序 2
1.2 编译程序组成 3
1.2.1 词法分析 4
1.2.2 句法分析和语义分析 6
1.2.3 代码优化和代码生成 7
1.2.4 表格管理和出错恢复 8
习题 8
第二章 词法分析 9
2.1 正则表达式 9
2.1.1 字母表的概念 9
2.1.2 正则表达式的概念 11
2.2 有限状态自动机 12
2.2.1 有限状态自动机及其表示 12
2.2.2 正则表达式到有限状态自动机的转换 18
2.2.3 有限状态自动机的最小化 21
2.3 词法分析的实现 25
习题 33
第三章 LL和LR句法分析法 35
3.1 上下文无关文法和下推自动机 35
3.1.1 上下文无关文法 36
3.1.2 下推自动机 44
3.1.3 上下文无关文法和下推自动机的关系 48
3.2 自顶向下句法分析 50
3.2.1 LL(1)文法的概念 50
3.2.2 LL(1)文法的句法分析 53
3.2.3 非LL(1)文法问题 60
3.3 产生式选择集合的计算 64
3.3.1 关系和关系运算 64
3.3.2 产生式选择集合的计算 70
3.4 自底向上句法分析 76
3.4.1 概论 76
3.4.2 LR(0)句法分析 81
3.4.3 LR(1)文法 89
3.4.4 SLR(1)文法和LALR(1)文法 94
3.4.5 LR句法分析控制表的安排 104
习题 111
第四章 其他句法分析法 118
4.1 简单优先关系和简单优先文法 118
4.1.1 简单优先关系 118
4.1.2 简单优先文法 122
4.2 弱优先文法和简单混合策略优先文法 131
4.2.1 弱优先文法 131
4.2.2 简单混合策略优先文法 135
4.3 运算符优先文法 136
习题 143
第五章 语义处理 145
5.1 中间代码表示法 145
5.1.1 中间代码概论 145
5.1.2 后缀表示形式和解释程序 146
5.1.3 多元组表示 149
5.1.4 树 153
5.2 句法制导翻译 154
5.2.1 句法制导和翻译文法 154
5.2.2 属性文法和属性翻译文法 158
习题 163
第六章 符号表管理 165
6.1 符号表内容 165
6.2 符号表的数据结构 168
6.2.1 线性表 168
6.2.2 二叉树 169
6.2.3 散列法 170
6.3 块结构语言的符号表构造 171
习题 175
第七章 运行时刻存储管理 177
7.1 引言 177
7.2 过程调用记录 178
7.3 块结构语言的非局部量的访问 181
7.4 数组和下标变量 189
7.4.1 数组 189
7.4.2 下标变量 192
7.5 形式参数和实在参数 193
7.5.1 按访问调用 193
7.5.2 按值调用 194
7.5.3 数组 194
7.5.4 过程 195
7.5.5 标号 195
7.6 过程调用和返回 196
7.6.1 过程调用和返回任务的划分 196
7.6.2 过程调用和返回语句的翻译 197
习题 197
第八章 常见程序结构的翻译 200
8.1 算术表达式的翻译 200
8.2 布尔表达式的优化翻译 202
8.3 顺序控制结构的翻译 205
8.3.1 if语句的翻译 205
8.3.2 for语句的翻译 207
8.3.3 go to语句的翻译 209
习题 210
第九章 代码生成和代码优化 212
9.1 概述 212
9.2 寄存器和临时变量的管理 215
9.2.1 寄存器管理 215
9.2.2 基地址寄存器的加载 217
9.2.3 临时变量管理 218
9.3 算术表达式的代码生成 221
9.3.1 寄存器分配子程序 221
9.3.2 保存寄存器的值 222
9.3.3 寄存器加载 223
9.3.4 取变量子程序 224
9.3.5 关于加法四元组的代码生成的描述 225
9.4 代码生成的进一步讨论 226
9.4.1 与转向有关的中间代码的目标代码生成 226
9.4.2 过程调用中间代码的目标代码生成 229
9.4.3 过程说明入口处的处理简介 231
9.5 与机器无关的代码优化概述 233
9.5.1 基本块和基本块的值 233
9.5.2 数据流分析简介 237
习题 241
第十章 出错恢复 243
10.1 引言 243
10.2 词法分析的出错恢复 244
10.3 LR和LL句法分析的出错恢复 244
习题 247
参考文献 248