本书是普通高等教育“十一五”国家级规划教材。计算机编译原理是计算机专业的重要专业基础课之一。本书系统地介绍高级程序设计语言编译程序的构造原理,重点讨论词法分析、语法分析、语义分析以及目标代码的生成与代码优化。各章末有本章概要、习题与上机实习题。书末附有解题规范例解与总复习思考题。本书特别讨论了编译各阶段的实现考虑,读者可从这些实际可行的实现方法和技巧中得到借鉴和启发。为了便于教学,本书另配有电子教案和习题解答可供选用,还提供配套教材《计算机编译原理——编译程序构造实践》,可供上机实践参考。
样章试读
目录
- 目录
前言
第1章 总论 1
1.1 引言 1
1.2 程序设计语言与程序 3
1.2.1 程序及其结构 3
1.2.2 程序设计语言的定义 4
1.2.3 程序的执行 7
1.3 编译程序构造及有关概念 9
1.3.1 编译程序的构造 9
1.3.2 遍的概念 11
1.3.3 编译程序的分类 12
1.3.4 实际应用中的编译程序 13
1.4 形式语言理论与编译实现技术 15
本章概要 15
第2章 文法与语言 17
2.1 符号串与符号串集合 17
2.1.1 字母表 17
2.1.2 符号串 17
2.1.3 符号串集合 19
2.2 文法与语言的形式定义 20
2.2.1 文法的形式定义 20
2.2.2 语言的形式定义 31
2.3 语言的分类 35
2.3.1 Chomsky文法类和语言类 35
2.3.2 形式语言与自动机 41
2.3.3 形式语言的分类与程序设计语言 44
2.3.4 对上下文无关文法的进一步讨论 45
2.4 文法等价与等价变换 47
2.4.1 文法等价的概念 47
2.4.2 压缩文法等价变换 48
2.4.3 消去左递归的文法等价变换 51
2.5 语法分析树与句型分析 55
2.5.1 语法分析树的概念 55
2.5.2 句型分析 61
本章概要 65
习题1 65
习题2 66
习题3 66
习题4 67
习题5 67
第2章上机实习题 68
第3章 词法分析 69
3.1 引言 69
3.1.1 词法分析与词法分析程序 69
3.1.2 符号的识别与重写规则的关系 69
3.1.3 实现方式 70
3.2 正则表达式与有穷状态自动机 71
3.2.1 状态转换图 71
3.2.2 确定有穷状态自动机DFA 75
3.2.3 非确定有穷状态自动机NFA 78
3.2.4 确定有穷状态自动机的化简 84
3.2.5 正则表达式 86
3.3 词法分析程序的实现 89
3.3.1 符号与属性字 89
3.3.2 标识符的处理 94
3.3.3 词法分析程序的编写 100
3.4 词法分析程序的自动生成 105
3.4.1 基本思想 105
3.4.2 扫描程序定义与构造程序 111
3.4.3 自动生成系统LEX筒介 114
本章概要 115
习题6 116
第3章上机实习题 117
第4章 语法分析——自顶向下分析技术 119
4.1 引言 119
4.1.1 自顶向下分析技术及识别算法 119
4.1.2 讨论的前提 119
4.1.3 要解决的基本问题 120
4.2 带回溯的自顶向下分析技术 121
4.2.1 基本思想 121
4.2.2 语法分析树的建立及其表列表示 123
4.2.3 问题及其解决 124
4.3 无回溯的自顶向下分析技术 125
4.3.1 先决条件 125
4.3.2 递归下降分析技术 125
4.3.3 预测分析技术 132
本章概要 142
习题7 143
第4章上机实习题 143
第5章 语法分析——自底向上分析技术 145
5.1 引言 145
5.1.1 自底向上分析技术及识别算法 145
5.1.2 讨论前提 145
5.1.3 基本实现方法:移入-归约法 146
5.2 算符优先分析技术 148
5.2.1 算符优先分析技术的引进 148
5.2.2 算符文法 148
5.2.3 算符优先关系与算符优先文法 150
5.2.4 算符优先文法句型的识别 154
5.2.5 优先函数 158
5.2.6 实际应用中的算符优先分析技术 168
5.3 LR(k)分析技术 170
5.3.1 LR(k)文法与LR(k)分析技术 170
5.3.2 SLR(k)分析表构造万法 182
5.3.3 LALR(k)分析表构造方法 196
5.3.4 识别程序自动构造 201
5.3.5 识别程序自动生成系统YACC简介 205
5.4 LR(1)识别程序句型分析的实现 207
本章概要 210
习题8 211
习题9 212
习题10 212
第5章上机实习题 213
第6章 语义分析与目标代码生成 214
6.1 概况 214
6.1.1 语义分析的概念 214
6.1.2 属性文法 216
6.1.3 类型体制与语义分析 233
6.2 说明部分的翻译 241
6.2.1 常量定义的翻译 242
6.2.2 变量说明的翻译 242
6.2.3 函数定义的翻译 244
6.2.4 结构体类型的翻译 247
6.3 目标代码的生成 248
6.3.1 概况 248
6.3.2 虚拟机 251
6.3.3 控制语句的翻译 253
6.4 语义分析的实现考虑 283
6.4.1 注释分析树的构造 283
6.4.2 语义动作的实现 288
6.4.3 语义子程序的例子 295
6.5 源程序的中间表示代码 296
6.5.1 抽象语法树 297
6.5.2 逆波兰表示 300
6.5.3 四元式序列 306
6.5.4 三元式序列 315
本章概要 316
习题11 317
习题12 317
习题13 318
习题14 319
第6章上机实习题 320
第7章 运行环境 321
7.1 引言 321
7.1.1 相关的问题 321
7.1.2 名字到存储字的结合 321
7.2 存储分配策略 325
7.2.1 静态存储分配 325
7.2.2 栈式存储分配 326
7.2.3 堆式存储分配 329
7.3 寄存器分配 332
7.3.1 使用图着色方法进行寄存器分配的思路 332
7.3.2 例子 333
7.3.3 若干问题讨论 335
7.4 符号表 336
7.4.1 符号表的引进 336
7.4.2 符号表的组织 337
7.4.3 符号表的数据结构 341
7.5 运行时刻支持系统 344
本章概要 345
习题15 346
第8章 代码优化 348
8.1 引言 348
8.1.1 优化的概念 348
8.1.2 代码优化的分类 349
8.1.3 代码优化程序的结构 350
8.2 基本块与流图 351
8.3 基本块的优化 352
8.3.1 基本块优化的种类 352
8.3.2 基本块优化的实现 356
8.4 与循环有关的优化 365
8.4.1 循环优化的种类 366
8.4.2 循环优化的实现 373
8.5 窥孔优化 395
8.5.1 冗余指令删除 395
8.5.2 控制流优化 397
8.5.3 代数化简 398
8.5.4 特殊指令的使用 398
本章概要 398
习题16 399
第8章上机实习题 401
第9章 程序错误的检查和校正 402
9.1 概述 402
9.1.1 错误存在的必然性 402
9.1.2 错误的种类 402
9.1.3 错误复原 404
9.2 词法错误的复原和校正 405
9.2.1 词法错误的种类 405
9.2.2 词法错误的校正 405
9.3 语法错误的复原和校正 406
9.3.1 语法错误的复原 406
9.3.2 语法错误的校正 407
9.4 语义错误 408
9.4.1 语义错误的种类 408
9.4.2 语义错误检查措施 409
本章概要 411
解题规范例解 412
总复习思考题 439
参考文献 441