第1章 语言处理程序概述 1
1.1 语言处理程序的发展过程 1
1.1.1 语言处理程序简介 1
1.1.2 语言处理程序的工作 2
1.1.3 语言处理程序的形式 2
1.2 高级语言的翻译 3
1.2.1 解释 3
1.2.2 编译 3
1.3 编译程序的结构 4
1.3.1 编译程序的阶段 4
1.3.2 阶段的组合 7
1.4 编译程序的相关软件和开发工具 7
1.4.1 语言的编辑器 8
1.4.2 调试工具 8
1.4.3 预处理程序 8
1.4.4 汇编器 9
1.4.5 装配和连接器 9
1.4.6 编译部件的自动生成 10
1.5 小结 10
1.6 习题 10
第2章 文法与语言 12
2.1 文法的基本概念 12
2.1.1 符号和符号串 12
2.1.2 文法和语言的形式定义 14
2.1.3 推导与递归 17
2.1.4 文法的分类 18
2.2 句型分析 19
2.1.1 语法树 19
2.2.2 文法的约定 21
2.2.3 句型的分析方法 22
2.3 小结 24
2.4 习题 25
第3章 词法分析 28
3.1 词法分析的基本概念 28
3.1.1 词法分析的意义 28
3.1.2 词法分析的输入输出 28
3.1.3 词法分析实现方法 30
3.2 正规式自动机和状态图 30
3.2.1 正规式的表示 30
3.2.2 有穷自动机 32
3.2.3 状态图 41
3.3 词法分析程序的设计 42
3.3.1 词法分析设计考虑的问题 42
3.3.2 词法分析程序流程图 43
3.4 小结 45
3.5 习题 45
第4章 语法分析 47
4.1 自顶向下的语法分析 47
4.1.1 自顶向下分析的思想 47
4.1.2 左递归和回溯性 48
4.1.3 递归下降分析方法 51
4.1.4 预测分析法 53
4.2 自底向上的语法分析 58
4.2.1 自底向上分析法概述 58
4.2.2 LR分析法的概念 62
4.2.3 LR(O)项目族的构造 66
4.2.4 SLR分析法 70
4.2.5 LALR分析法 72
4.2.6 二义性文法的应用 77
4.3 小结 79
4.4 习题 79
第5章 编译程序的数据结构和符号表 82
5.1 分配型数据结构 82
5.1.1 栈 82
5.1.2 堆 84
5.2 查找型数据结构 84
5.2.1 表的组织 85
5.2.2 符号表的管理 87
5.3 小结 88
5.4 习题 89
第6章 语法制导翻译 90
6.1 中间代码的形式 90
6.1.1 逆波兰式 90
6.1.2 三元式和树 91
6.1.3 四元式 92
6.1.4 汇编代码 93
6.2 语法制导翻译的概述 94
6.2.1 计算表达式的制导翻译 94
6.2.2 逆波兰式的制导翻译 97
6.3 自底向上的制导翻译 99
6.3.1 赋值语句的翻译 99
6.3.2 说明语句的翻译 106
6.3.3 短路表达式的制导翻译 110
6.3.4 控制语句的翻译 113
6.4 自顶向下的制导翻译 122
6.4.1 翻译方案的设计 122
6.4.2 递归子程序翻译器的设计 123
6.5 小结 125
6.6 习题 125
第7章 编译程序 128
7.1 编译程序考虑的因素 128
7.1.1 数据类型 128
7.1.2 数据结构 130
7.1.3 作用域规则 131
7.1.4 控制结构 132
7.2 执行时的内存分配 133
7.2.1 静态和动态内存分配 133
7.2.2 嵌套结构的内存分配 137
7.2.3 数组的分配和访问 143
7.3 代码优化 144
7.3.1 优化变换 145
7.3.2 局部优化 148
7.3.3 全局优化 151
7.4 赋值语句、输入和输出语句的编译 154
7.4.1 赋值语句的代码生成器 154
7.4.2 输入、输出语句的代码生成器 157
7.5 控制结构的编译 157
7.5.1 控制转移 158
7.5.2 函数和过程的调用 159
7.6 程序重定位概述 160
7.6.1 程序的重定位 161
7.6.2 连接 161
7.6.3 目标模块 162
7.7 小结 163
7.8 习题 163
附录 166
附录A 实验一词法分析程序 166
附录B 实验二语法分析1——递归子程序法 169
附录C 实验三语法分析2——预测分析法 172
附录D 实验四语义分析和代码生成 175
附录E 词法分析程序、源程序和注释 177
附录F 递归子程序识别程序源程序和注释 180
附录G 预测分析法识别程序源程序和注释 190
附录H 语义分析、代码生成程序、源程序和注释 192
参考文献 216