第一章 绪论 1
1.1 程序设计语言概述 2
1.1.1 高级程序设计语言的特点和发展 2
1.1.2 高级程序设计语言的参数传递 3
1.2 编译过程概述 6
1.2.1 词法分析 6
1.2.2 语法分析和语义分析 7
1.2.3 中间代码生成和优化 8
1.2.4 目标代码 9
1.2.5 表格管理 10
1.2.6 错误检测 11
1.2.7 编译阶段的组合 12
1.3 并行编译概述 13
习题一 13
第二章 文法和语言 14
2.1 文法和语言的定义 14
2.1.1 概念 14
2.1.2 文法和语言的定义 15
2.1.3 文法的Chomsky分类 17
2.1.4 文法产生式的其他表示法 19
2.2 句型的语法树和文法的二义性 19
2.2.1 语法树 19
2.2.2 文法二义性及规范归约的算法 20
2.3 文法的等价变换 22
2.3.1 文法等价的定义 22
2.3.2 等价变换的几种方法 22
习题二 25
第三章 词法分析 27
3.1 词法分析的任务 27
3.1.1 单词与扫描器的功能 27
3.1.2 将扫描器分离的考虑 29
3.2 正则文法与状态转换图 29
3.2.1 状态转换图 29
3.2.2 正则文法的状态转换图表示 31
3.3 有限自动机 32
3.3.1 确定有限自动机 32
3.3.2 非确定有限自动机 33
3.3.3 非确定有限自动机的确定化和最简化 34
3.4 正规式和正规集 40
3.4.1 正规式和正规集的定义 40
3.4.2 正规式与有限自动机 41
3.4.3 正规式与正规文法 43
3.5 扫描器生成 45
3.5.1 由状态图生成扫描器 45
3.5.2 扫描器的自动生成 48
习题三 51
第四章 语法分析 54
4.1 自上而下分析 54
4.1.1 自上而下分析存在的问题 55
4.1.2 递归下降分析器 59
4.1.3 LL(1)分析器 61
4.2 算符优先分析算法 66
4.2.1 直观算符优先分析法 66
4.2.2 算符优先分析法 68
4.3 LR分析法 74
4.3.1 LR分析过程 74
4.3.2 LR(0)项目集规范族和LR(0)分析表 76
4.3.3 SLR(1)分析表 83
4.3.4 LR(1)项目集规范族和LR(1)分析表 84
4.3.5 LALR(1)分析表 90
4.3.6 二义性文法的应用 92
习题四 94
第五章 语法制导翻译与中间代码生成 96
5.1 概述 97
5.1.1 翻译文法(TG) 97
5.1.2 属性翻译文法(ATG) 98
5.1.3 语法制导翻译 102
5.2 中间代码表示法 103
5.2.1 逆波兰表示法 103
5.2.2 三元式表示法 108
5.2.3 树结构表示法 111
5.2.4 四元式表示法 112
5.3 表达式及赋值语句的翻译 113
5.3.1 算术表达式与赋值语句的翻译 113
5.3.2 布尔表达式的翻译 115
5.4 控制语句的翻译 119
5.4.1 标号与GOTO语句的翻译 119
5.4.2 IF语句与WHILE语句的翻译 120
5.4.3 FOR语句的翻译 123
5.4.4 CASE语句的翻译 126
5.5 数组元素的翻译 129
5.5.1 数组元素的地址计算 129
5.5.2 赋值语句中数组元素的翻译 130
5.6 过程调用语句的翻译 132
5.6.1 过程调用的四元式产生 133
5.6.2 过程调用和数组元素相混淆的处理 134
5.7 说明语句的翻译 134
5.8 类型检查 136
5.8.1 类型系统 137
5.8.2 类型检查器的规格说明 138
习题五 141
第六章 代码优化 145
6.1 概述 145
6.2 局部优化 146
6.2.1 基本块的划分 147
6.2.2 基本块的DAG表示 147
6.2.3 基本块的优化处理 151
6.2.4 含有数组元素的DAG 151
6.3 全局优化 153
6.3.1 程序流图 153
6.3.2 到达—定值数据流方程及到达—定值链 154
6.3.3 引用—定值链的计算及应用 158
6.3.4 活跃变量数据流方程 159
6.3.5 定值—引用链 161
6.4 循环优化 163
6.4.1 循环的定义 163
6.4.2 循环优化 163
习题六 176
第七章 运行时存储空间管理 180
7.1 运行时存储空间组织 180
7.2 运行时存储空间分配 181
7.2.1 静态分配 181
7.2.2 栈式分配 182
7.2.3 堆式分配 187
7.3 FORTRAN语言的分配方案 188
7.3.1 公用语句的处理 189
7.3.2 等价语句的处理 190
7.3.3 地址分配 193
习题七 194
第八章 目标代码生成 195
8.1 概述 195
8.2 目标计算机模型 195
8.3 简单代码生成算法 197
8.3.1 寄存器和地址描述 197
8.3.2 寄存器分配 198
8.3.3 简单代码生成算法 199
习题八 200
附录A:课程设计指导书 202
A.1 概述 202
一、课程设计的目的 202
二、课程设计的内容 202
三、课程设计的组织 203
四、课程设计的时间 203
A.2 课程设计示例 203
一、题目及要求 203
二、设计过程 205
A.3 课程设计题目 206
参考文献 210