第1章 引言 1
1.1程序的翻译及运行 1
1.2编译过程概述 2
1.3编译程序的结构框图 5
1.4编译程序的开发 5
1.4.1编译程序的开发步骤 5
1.4.2编译程序的开发技术 6
1.4.3编译程序的自动生成 6
习题1 7
第2章 形式语言理论基础 8
2.1形式语言的基本概念 8
2.1.1符号和符号串 8
2.1.2符号串的运算 9
2.2文法和语言的形式定义 11
2.3语法树和二义性 16
2.3.1语法树和推导 16
2.3.2文法二义性 19
2.4文法的实用限制 21
2.4.1有害规则 21
2.4.2多余规则 21
2.4.3文法的实用限制 23
2.4.4文法的等价变换 23
2.4.5扩充的BNF表示法 28
2.5文法和语言的Chomsky分类 29
2.5.1 0型文法与0型语言(对应图灵机) 29
2.5.2 1型文法与1型语言(对应线性界限自动机) 29
2.5.3 2型文法与2型语言(对应下推自动机) 30
2.5.4 3型文法与3型语言(对应有限自动机) 31
2.5.5四类文法的关系 32
习题2 33
第3章 自动机理论基础 35
3.1有限自动机的基本概念 35
3.1.1有限自动机的定义及表示法 35
3.1.2有限自动机的机器模型 37
3.1.3确定有限自动机(DFA) 37
3.1.4有限自动机在计算机内的示 38
3.1.5不确定有限自动机(NFA) 39
3.1.6由NFA到DFA的等价转换 41
3.2确定有限自动机DFA的化简 43
3.2.1等价状态和无关状态 43
3.2.2自动机的化简 44
3.3正则表达式形式定义 46
3.4下推自动机PDA 47
3.4.1下推自动机的机器模型 47
3.4.2 PDA的形式定义 47
习题3 49
第4章 词法分析 51
4.1词法分析概述 51
4.1.1词法分析的功能 51
4.1.2词法分析的两种处理结构 51
4.1.3单词符号的种类 52
4.1.4词法分析程序的输出形式 52
4.2词法分析程序的设计与实现 53
4.2.1词法分析程序流程图 53
4.2.2读单词 54
4.2.3读无符号数 57
4.2.4读标识符 58
4.3词法分析程序的自动生成 60
4.3.1基本思想 60
4.3.2 LEX源程序结构 60
4.3.3 LEX编译程序工作过程 62
4.3.4 LEX的实现 62
4.3.5 LEX的使用方式 63
习题4 63
第5章 语法分析——自顶向下分析方法 65
5.1自顶向下分析技术 65
5.2不确定的自顶向下分析思想 66
5.2.1三种终结符号集 67
5.2.2自顶向下分析过程中存在的问题及解决办法 68
5.3确定的自顶向下分析思想 70
5.4 LL (K)分析方法 70
5.4.1 LL (1)分析思想 71
5.4.2 LL (1)分析方法的逻辑结构 71
5.4.3 LL (1)分析方法 72
5.5递归下降分析法 78
5.5.1递归下降分析法的实现思想 78
5.5.2递归子程序及其性质 79
5.5.3递归下降分析法 80
习题5 84
第6章 语法分析——自底向上分析方法 87
6.1自底向上语法分析技术 87
6.1.1自底向上语法分析思想 87
6.1.2自底向上分析难点 88
6.2自底向上优先分析方法 89
6.2.1简单优先分析方法 89
6.2.2算符优先分析方法 93
6.3 LR (K)分析方法 101
6.3.1 LR分析思想及逻辑结构 102
6.3.2 LR (0)分析方法 105
6.3.3 SLR (1)分析方法 112
6.3.4 LR (1)分析方法 115
6.3.5 LALR(1)分析方法 118
习题6 122
第7章 语义分析及中间代码生成 124
7.1基本概念 124
7.1.1语义分析的概念 124
7.1.2属性文法技术 125
7.2几种常见的中间语言 128
7.2.1抽象语法树 128
7.2.2逆波兰表示 129
7.2.3四元式 132
7.2.4三元式 135
7.3表达式的翻译 138
7.3.1算术表达式的翻译 139
7.3.2布尔表达式的翻译 140
7.4语句的语法制导翻译 143
7.4.1说明语句的翻译 143
7.4.2赋值语句的翻译 145
7.4.3控制语句的翻译 146
习题7 149
第8章 代码优化 151
8.1代码优化的基本概念 151
8.1.1代码优化的定义 151
8.1.2代码优化的分类 151
8.1.3优化技术简介 152
8.2局部优化 155
8.2.1基本块的划分 155
8.2.2基本块的DAG表示 156
8.2.3基本块优化的实现 159
8.3循环优化 160
8.3.1循环的查找 160
8.3.2循环优化的实现 161
习题8 165
第9章 目标代码的生成 167
9.1目标代码生成程序中的有关问题 167
9.1.1目标代码生成程序的输入、输出 167
9.1.2目标代码 167
9.1.3寄存器分配 168
9.1.4运行时的存储管理 169
9.2一个计算机模型——虚拟机 169
9.2.1虚拟机 169
9.2.2虚拟机的汇编指令 169
9.3从中间代码生成目标代码 172
9.3.1从逆波兰表示生成目标代码 172
9.3.2从四元式序列生成目标代码 174
习题9 175
第10章 符号表 176
10.1符号表的组织与内容 176
10.2符号表的结构与存放 178
10.2.1线性符号表 178
10.2.2有序符号表 178
10.2.3散列符号表 179
10.2.4栈式符号表 180
10.3符号表的管理 181
10.3.1符号表的建立 182
10.3.2符号表的查填 183
习题10 184
第11章 目标程序运行时的存储组织与分配 185
11.1程序运行时的存储组织 185
11.2静态存储分配 185
11.3栈式动态存储分配 187
11.3.1简单的栈式存储分配 187
11.3.2嵌套过程语言的栈式存储分配 188
11.4堆式动态存储分配 190
11.5过程调用与返回 192
11.6参数传递机制 192
习题11 195
第12章 出错处理 196
12.1引言 196
12.1.1错误存在的必然性 196
12.1.2错误的种类 196
12.1.3错误复原 197
12.2校正词法错误 198
12.2.1词法错误的种类 198
12.2.2词法错误的校正 198
12.3校正语法错误 199
12.3.1语法错误的复原 199
12.3.2语法错误的校正 199
12.4校正语义错误 201
12.4.1语义错误的种类 201
12.4.2语义错误检查措施 202
习题12 203
第13章 编译程序自动生成工具简介 204
13.1引言 204
13.1.1编译程序自动生成工具概述 204
13.1.2编译程序自动生成工具的种类及常用工具简介 204
13.2词法分析自动生成工具 205
13.2.1 LEX系列词法分析自动生成工具简介 206
13.2.2其他词法分析自动生成工具简介 211
13.3语法分析自动生成工具 212
13.3.1 YACC系列语法分析自动生成工具简介 213
13.3.2其他语法分析自动生成工具简介 218
习题13 221
第14章 面向对象语言的编译 222
14.1概述 222
14.1.1面向对象语言的基本特征 222
14.1.2类和成员的属性构造 224
14.1.3面向对象编译程序的特点 227
14.2面向对象语言的编译 228
14.2.1单一继承 228
14.2.2多重继承 230
14.2.3多态性 231
14.2.4动态绑定 231
14.2.5接口类型 231
14.3面向对象的动态存储分配 232
14.3.1对象的存储区管理方式 232
14.3.2静态模型和栈式模型废弃单元的回收 232
14.3.3堆式模型废弃单元的回收 233
习题14 235
第15章 并行编译技术 236
15.1并行计算机及其编译系统简介 236
15.1.1并行计算相关技术简介 237
15.1.2并行编译系统的分类及结构 239
15.2并行程序设计模型 242
15.2.1并行体系结构分类及并行程序设计 242
15.2.2并行程序设计模型 243
15.3并行编译系统的构造 245
15.3.1并行编译系统的构造简介 245
15.3.2程序分析 246
15.3.3程序优化 250
15.3.4并行代码生成 251
15.4自动并行化技术目前研究现状 254
习题15 256
参考文献 257