本书根据高等学校本科课程“编译原理”的教学基本要求进行编写。本书系统介绍了编译程序在设计和实现方面的基本原理、基本方法和实现技术。主要内容包括:形式语言与文法、正规式与有穷自动机、词法分析、自顶向下语法分析、自底向上语法分析、语义分析与中间代码生成、代码优化、目标代码生成、符号表以及运行时的存储组织与管理等相关知识。本书系统性强,概念、条理清晰,内容通俗易懂。本书共 11章,每一章均包括学习导读、基本内容、本章小结、核心概念、单元自测和习题等。
样章试读
目录
- 目录
前言
第1章 绪论 1
1.1 程序设计语言与编译程序 1
1.1.1 程序设计语言的翻译程序 1
1.1.2 编译程序和解释程序 1
1.1.3 学习编译程序带来的益处 3
1.2 编译的基本知识 3
1.2.1 编译过程 3
1.2.2 编译程序的基本结构 6
1.2.3 遍 6
1.2.4 编译程序的前端和后端 7
1.3 编译程序的设计和实现方式 8
1.4 编译程序的配套工具 9
1.4.1 预处理器 9
1.4.2 汇编程序 9
1.4.3 连接装配程序 10
1.5 编译程序的发展及编译技术的应用 11
1.5.1 编译程序的发展 11
1.5.2 编译技术的应用 11
1.6 本章小结 12
单元自测题 1 12
习题1 14
第2章 形式语言与文法 15
2.1 程序设计语言的描述 15
2.2 形式语言的基本概念 16
2.2.1 字母表和符号串 16
2.2.2 符号串的运算 17
2.3 文法和语言的形式定义 18
2.3.1 文法的形式定义 18
2.3.2 语言的形式定义 21
2.3.3 规范推导和规范归约 22
2.3.4 递归规则与文法的递归性 23
2.4 短语、直接短语和句柄 25
2.5 语法树及文法的二义性 26
2.5.1 语法树 26
2.5.2 文法的二义性 28
2.5.3 文法二义性的消除 29
2.6 文法的实用限制和等价变换 31
2.6.1 文法的实用限制 31
2.6.2 文法的等价变换 32
2.7 文法和语言的分类 33
2.8 本章小结 35
单元自测题2 36
习题2 39
第3章 正规式与有穷自动机 41
3.1 正规式与正规集 41
3.2 正规式与正规文法 42
3.3 有穷自动机 45
3.3.1 确定的有穷自动机 45
3.3.2 非确定的有穷自动机 47
3.3.3 DFA与 NFA的等价性 48
3.3.4 NFA确定化为 DFA 49
3.3.5 DFA化简 51
3.4 正规式与有穷自动机 54
3.4.1 由正规式 R构造 NFA 54
3.4.2 有穷自动机到正规式的转换方法 56
3.5 正规文法与有穷自动机 57
3.5.1 右线性文法到有穷自动机的转换方法 57
3.5.2 左线性文法到有穷自动机的转换方法 58
3.5.3 有穷自动机到正规文法的转换方法 59
3.6 本章小结 60
单元自测题 3 60
习题3 62
第4章词法分析 64
4.1 词法分析程序的功能 64
4.2 单词符号及输出单词的形式 64
4.2.1 语言的单词符号 64
4.2.2 词法分析程序输出单词的形式 65
4.3 词法分析程序的构造 66
4.4 词法分析程序的自动生成工具 LEX 73
4.4.1 LEX介绍 73
4.4.2 LEX源程序的结构 74
4.4.3 LEX的实例 77
4.5本章小结 78
单元自测题4 79
习题4 80
第5章 自顶向下语法分析 81
5.1 语法分析的作用和分类 81
5.2 非确定的自顶向下分析法的思想 82
5.3 文法的左递归性和回溯的消除 83
5.3.1 左递归性的消除 83
5.3.2 确定的自顶向下分析的定义 84
5.3.3 回溯的消除 85
5.4 递归下降分析法 89
5.5 预测分析法 90
5.6 本章小结 94
单元自测题 5 94
习题5 96
第6章自底向上语法分析 98
6.1 自底向上分析法的原理 98
6.2 LR分析法 99
6.2.1 LR语法分析程序的工作原理和过程 100
6.2.2 LR(0)分析法 103
6.2.3 SLR(1)分析法 107
6.2.4 LR(1)分析法 113
6.2.5 LALR(1)分析法 116
6.2.6 LR分析对二义性文法的应用 120
6.2.7 LR语法分析中的错误恢复技术 121
6.2.8 LR分析法的应用与拓展 124
6.3 语法分析程序自动生成工具简介 125
6.4 本章小结 125
单元自测题6 126
习题6 128
第7章 语义分析与中间代码生成 130
7.1 语义分析的基本知识 130
7.1.1 语义分析的概念 130
7.1.2 语义分析的任务 131
7.1.3 语义分析的错误处理 131
7.2 语法制导翻译 132
7.2.1 语法制导 132
7.2.2 翻译方案 133
7.2.3 基于语法制导的翻译 133
7.3 属性文法 135
7.3.1 属性文法的基本概念 135
7.3.2 属性文法的处理方法 138
7.4 几种常见的中间语言 139
7.4.1 抽象语法树 139
7.4.2 逆波兰式 140
7.4.3 三元式、间接三元式和树形表示 141
7.4.4 四元式和三地址代码 143
7.5 递归下降语法制导翻译 144
7.6 自底向上语法制导翻译 145
7.6.1 简单算术表达式和赋值语句的翻译 145
7.6.2 布尔表达式的翻译 147
7.6.3 控制语句的翻译 148
7.6.4 循环语句的翻译 149
7.6.5 简单说明语句的翻译 150
7.6.6 含数组元素的赋值语句的翻译 150
7.6.7 过程和函数调用语句的翻译 152
7.7 本章小结 152
单元自测题7 153
习题7 156
第8章代码优化 158
8.1 代码优化的含义、原则和分类 158
8.2 局部优化 159
8.2.1 基本块的划分方法 159
8.2.2 基本块的优化技术 161
8.2.3 基本块优化技术的实现 163
8.3 循环优化 168
8.3.1 循环的基本概念 169
8.3.2 循环的优化技术 171
8.4 本章小结 175
单元自测题8 175
习题8 176
第9章 目标代码生成 178
9.1 目标代码生成的作用、形式和过程 178
9.2 简单代码生成器实例 180
9.3 代码生成器的自动生成技术 183
9.4 本章小结 183
单元自测题 9 183
习题9 184
第10章 符号表 185
10.1 符号表的组织和内容 185
10.2 符号表的结构与存放 187
10.2.1 线性符号表 187
10.2.2 有序符号表 188
10.2.3 散列符号表 189
10.3 符号表的管理 190
10.3.1 符号表的建立 190
10.3.2 符号表的查填 191
10.4 本章小结 192
单元自测题10 192
习题10 193
第11章 运行时的存储组织与管理 194
11.1 运行时存储组织的作用、任务和存储空间的布局 194
11.1.1 运行时存储组织的作用与任务 194
11.1.2 程序运行时存储空间的布局 195
11.2 静态存储分配 196
11.3 栈式存储分配 197
11.4 堆式存储分配 197
11.5 活动记录 199
11.5.1 过程活动记录 199
11.5.2 嵌套过程定义中非局部量的访问 201
11.6 本章小结 206
单元自测题 11 206
习题11 207
参考文献208