关于我们
![]() ![]() |
编译原理(第5版) 读者对象:高等学校计算机及相关专业学生 ![]()
本书是全国电子信息类优秀教材和华中科技大学优秀教学成果,根据高等学校"编译原理”课程教学基本要求编写。全书系统介绍了编译程序的一般构造原理、基本设计方法和主要实现技术。内容包括:文法和语言基本知识、词法分析程序的设计原理与构造方法、各种语法分析技术、语法制导翻译技术与中间代码生成、符号表的组织和管理、代码优化、运行时存储空间的组织与管理、目标代码生成、并行编译技术基本常识等。 本书系统性强、概念清晰,内容简明通俗,每章配有本章学习导读、本章小结、自测练习题和习题。附录给出了自测练习题与习题参考答案及编译程序实验等,本书还免费提供电子课件和实验源代码。 本书可作为高等学校计算机专业本科生教材,也可作为成人教育本科和专升本学生的教材,对相关工程技术人员也有参考价值。
刘铭,华中科技大学信息安全专业博士(2010),硕导,美国雪城大学访问学者。华中科技大学系统与软件安全团队(湖北省青年五四奖章集体,2023)成员,长期从事计算机系统软件、软件安全研究,参与国家自然科学基金项目5项,获得相关专利10余项,主持教育部产学研协同育人项目1项,参与并获得获湖北省科技进步一等奖1项(2022),省部级教学成果二等奖1项(2022),主编教材3部。
第 1 章 编译概述 ……………………………………………………………………………… 1
1. 1 翻译程序与编译程序 ……………………………………………………………………… 1 1.2 编译过程和编译程序的基本结构 ………………………………………………………… 2 1.3 编译程序的生成方法 ……………………………………………………………………… 5 1. 4 编译技术在软件开发中的应用 …………………………………………………………… 6 本章小结 ……………………………………………………………………………………… 7 扩展阅读 ……………………………………………………………………………………… 7 自测练习题 1 ………………………………………………………………………………… 7 习题 1 …………………………………………………………………………………………8 第 2 章 文法和语言的基本知识 ………………………………………………………………9 2. 1 概述 ……………………………………………………………………………………… 9 2.2 字母表和符号串的基本概念 ……………………………………………………………… 9 2.2.1 字母表和符号串 …………………………………………………………………… 9 2.2.2 符号串的运算 …………………………………………………………………… 10 2.3 文法和语言的形式定义 ………………………………………………………………… 11 2.3.1 形式语言 ………………………………………………………………………… 11 2.3.2 文法的形式定义…………………………………………………………………… 12 2.3.3 语言的形式定义…………………………………………………………………… 15 2.3. 4 规范推导和规范归约 ……………………………………………………………… 17 2.3.5 递归规则与文法的递归性 ………………………………………………………… 19 2.4 短语、 直接短语和句柄 ………………………………………………………………… 20 2. 4. 1 短语和直接短语…………………………………………………………………… 20 2.4.2 句柄 ……………………………………………………………………………… 20 2.5 语法树与文法的二义性 ………………………………………………………………… 21 2.5.1 推导和语法树 …………………………………………………………………… 21 2.5.2 文法的二义性 …………………………………………………………………… 23 2.5.3 文法二义性的消除 ………………………………………………………………… 24 2.6 文法和语言的分类 ……………………………………………………………………… 25 2.7 有关文法的实用限制和变换 ……………………………………………………………… 27 本章小结 ……………………………………………………………………………………… 28 扩展阅读 ……………………………………………………………………………………… 29 自测练习题 2 ………………………………………………………………………………… 29 习题 2 …………………………………………………………………………………………32 第 3 章 词法分析与有穷自动机……………………………………………………………… 34 3.1 词法分析程序的功能 …………………………………………………………………… 34 3. 2 单词符号及输出单词的形式 ……………………………………………………………… 34 3.2. 1 语言的单词符号…………………………………………………………………… 35 3. 2.2 词法分析程序输出单词的形式 …………………………………………………… 35 3.3 语言单词符号的两种定义方式 …………………………………………………………… 36 3. 3. 1 正规式与正规集…………………………………………………………………… 36 3. 3. 2 正规文法与正规式 ………………………………………………………………… 37 3.4 正规式与有穷自动机 …………………………………………………………………… 40 3.4. 1 确定有穷自动机 (DFA) ………………………………………………………… 40 3. 4.2 非确定有穷自动机 (NFA) ……………………………………………………… 41 3. 4. 3 由正规表达式 R 构造 NFA ………………………………………………………… 42 3. 4. 4 NFA 确定化为 DFA 的方法 ………………………………………………………… 43 3. 4.5 DFA 的化简 ……………………………………………………………………… 46 3.4. 6 有穷自动机到正规式的转换 ……………………………………………………… 48 3.5 正规文法与有穷自动机 ………………………………………………………………… 49 3.5.1 右线性正规文法到有穷自动机的转换方法 ………………………………………… 49 3. 5. 2 左线性正规文法到有穷自动机的转换方法 ………………………………………… 50 3. 5.3 有穷自动机到正规文法的转换方法………………………………………………… 50 3.6 词法分析程序的编写方法………………………………………………………………… 51 本章小结 ……………………………………………………………………………………… 56 扩展阅读 ……………………………………………………………………………………… 57 自测练习题 3 ………………………………………………………………………………… 58 习题 3 …………………………………………………………………………………………59 第 4 章 语法分析 ……………………………………………………………………………… 62 4. 1 语法分析程序的功能 …………………………………………………………………… 62 4.2 自上而下分析法 ………………………………………………………………………… 63 4.2. 1 非确定的自上而下分析法的思想 ………………………………………………… 63 4. 2.2 文法的左递归性和回溯的消除 …………………………………………………… 64 4. 2.3 某些非 LL(1)文法到 LL(1)文法的改写 …………………………………………… 67 4.2.4 递归下降分析法…………………………………………………………………… 69 4. 2. 5 预测分析法与预测分析表的构造 ………………………………………………… 71 4. 3 自下而上分析法的一般原理 ……………………………………………………………… 73 4.4 算符优先分析法 ………………………………………………………………………… 74 4.4. 1 方法概述 ………………………………………………………………………… 74 4. 4.2 算符优先文法的定义 ……………………………………………………………… 75 4.4.3 算符优先关系表的构造 …………………………………………………………… 76 4.4.4 算符优先分析算法的设计 ………………………………………………………… 77 4.4. 5 优先函数的构造…………………………………………………………………… 80 4.4.6 算符优先分析法的局限性 ………………………………………………………… 82 4.5 LR 分析法 ……………………………………………………………………………… 82 4.5.1 LR 分析器的工作原理和过程 ……………………………………………………… 82 4. 5.2 LR(0)分析法 …………………………………………………………………… 85 4. 5. 3 SLR(1)分析法 …………………………………………………………………… 89 4.5.4 LR(1)分析法 …………………………………………………………………… 93 4.5.5 LALR(1)分析法 ………………………………………………………………… 96 4.5.6 LR 分析法对二义性文法的应用 …………………………………………………… 99 4. 5.7 LR 语法分析中的错误恢复技术…………………………………………………… 100 4.6 语法分析程序的编写方法 ……………………………………………………………… 103 本章小结 …………………………………………………………………………………… 104 扩展阅读 …………………………………………………………………………………… 105 自测练习题 4 ………………………………………………………………………………… 106 习题 4 ………………………………………………………………………………………108 第 5 章 语法制导翻译技术和中间代码生成 …………………………………………………111 5. 1 概述 …………………………………………………………………………………… 111 5.2 属性文法 ……………………………………………………………………………… 111 5.3 语法制导翻译概述 ……………………………………………………………………… 114 5.4 中间语言 ……………………………………………………………………………… 115 5.4.1 逆波兰式 ………………………………………………………………………… 115 5.4.2 三元式和树形表示 ……………………………………………………………… 116 5.4.3 四元式和三地址代码 …………………………………………………………… 118 5.5 自下而上语法制导翻译 ………………………………………………………………… 118 5.5.1 简单算术表达式和赋值语句的翻译 ……………………………………………… 118 5.5.2 布尔表达式的翻译 ……………………………………………………………… 120 5.5.3 控制语句的翻译 ………………………………………………………………… 126 5.5.4 循环语句的翻译 ………………………………………………………………… 129 5.5.5 简单说明语句的翻译 …………………………………………………………… 130 5.5.6 含数组元素的赋值语句的翻译 …………………………………………………… 131 5.5.7 过程和函数调用语句的翻译 ……………………………………………………… 134 5.6 递归下降语法制导的翻译 ……………………………………………………………… 136 本章小结 …………………………………………………………………………………… 137 扩展阅读 …………………………………………………………………………………… 138 自测练习题 5 ………………………………………………………………………………… 138 习题 5 ………………………………………………………………………………………139 第 6 章 符号表的组织与管理 …………………………………………………………………141 6. 1 符号表的作用…………………………………………………………………………… 141 6.2 符号表的组织…………………………………………………………………………… 143 6.3 符号表的建立和查找 …………………………………………………………………… 146 本章小结 …………………………………………………………………………………… 149 扩展阅读 …………………………………………………………………………………… 149 自测练习题 6 ………………………………………………………………………………… 149 习题 6 ………………………………………………………………………………………150 第 7 章 代码优化 ………………………………………………………………………………151 7.1 优化概述 ……………………………………………………………………………… 151 7.2 局部优化 ……………………………………………………………………………… 155 7.2. 1 划分基本块的方法 ……………………………………………………………… 155 7.2.2 基本块的 DAG 表示 ……………………………………………………………… 155 7.2.3 利用 DAG 进行基本块的优化处理 ………………………………………………… 159 7. 3 循环优化 ……………………………………………………………………………… 160 7.3.1 程序流图与循环 ………………………………………………………………… 161 7.3.2 循环查找 ………………………………………………………………………… 162 7.3. 3 循环优化 ………………………………………………………………………… 164 7.4 窥孔优化 ……………………………………………………………………………… 168 本章小结 …………………………………………………………………………………… 170 扩展阅读 …………………………………………………………………………………… 171 自测练习题 7 ………………………………………………………………………………… 171 习题 7 ………………………………………………………………………………………172 第 8 章 运行时的存储组织与管理…………………………………………………………… 173 8.1 概述 …………………………………………………………………………………… 173 8. 2 静态存储分配…………………………………………………………………………… 174 8.3 栈式存储分配…………………………………………………………………………… 175 8.3.1 简单栈式存储分配 ……………………………………………………………… 175 8.3.2 嵌套过程的栈式存储分配 ………………………………………………………… 176 8.4 堆式存储分配…………………………………………………………………………… 178 8.5 临时变量的存储分配 …………………………………………………………………… 179 本章小结 …………………………………………………………………………………… 179 扩展阅读 …………………………………………………………………………………… 180 自测练习题 8 ………………………………………………………………………………… 180 习题 8 ………………………………………………………………………………………180 第 9 章 目标代码生成 …………………………………………………………………………182 9. 1 概述 …………………………………………………………………………………… 182 9. 2 假想的计算机模型 ……………………………………………………………………… 182 9.3 简单代码生成器 ………………………………………………………………………… 183 9.3.1 待用信息与活跃信息 …………………………………………………………… 183 9. 3.2 代码生成算法 …………………………………………………………………… 185 9.3. 3 寄存器的分配 …………………………………………………………………… 186 9.4 代码生成器的自动生成技术 …………………………………………………………… 186 本章小结 …………………………………………………………………………………… 187 扩展阅读 …………………………………………………………………………………… 187 自测练习题 9 ………………………………………………………………………………… 187 习题 9 ………………………………………………………………………………………187 第 10 章 并行编译技术基本常识 ……………………………………………………………189 10. 1 并行编译技术的引入…………………………………………………………………… 189 10. 2 并行编译系统的功能和结构 …………………………………………………………… 190 10.2.1 并行编译系统的功能 …………………………………………………………… 190 10.2.2 并行编译系统的结构 …………………………………………………………… 190 10. 3 向量语言编译技术 …………………………………………………………………… 191 10. 3.1 向量语法处理…………………………………………………………………… 191 10.3.2 向量结构优化…………………………………………………………………… 191 10.4 共享存储器并行机并行编译技术 ……………………………………………………… 192 10.4. 1 预编译 ………………………………………………………………………… 192 10.4.2 可再入的目标代码 ……………………………………………………………… 192 本章小结 …………………………………………………………………………………… 193 习题 10 ………………………………………………………………………………………193 附录 A 词法分析程序生成器 Lex ………………………………………………………… 194 A.1 词法分析程序生成器 Lex 简介 ………………………………………………………… 194 A.2 Lex 输入文件的格式 …………………………………………………………………… 195 A.3 正规表达式的 Lex 约定 ………………………………………………………………… 197 A.4 Lex 源程序中的规则部分 ……………………………………………………………… 199 A. 5 Flex 的命令选项………………………………………………………………………… 201 A.6 Lex 程序示例 ……………………………………………………………………………202 附录 B 语法分析程序生成器 YACC ………………………………………………………203 B. 1 语法分析程序 YACC 简介 ……………………………………………………………… 203 B.2 YACC 输入文件的格式 ………………………………………………………………… 203 B.3 YACC 各部分的书写格式 ……………………………………………………………… 204 B. 3. 1 定义部分………………………………………………………………………… 204 B. 3.2 规则部分………………………………………………………………………… 207 B.3.3 辅助程序部分 …………………………………………………………………… 209 B.4 YACC 的内置名称和定义机制…………………………………………………………… 209 B.5 Flex 与 Bison 的联合使用 ………………………………………………………………209 附录 C 编译程序实验 …………………………………………………………………………212 C.1 词法分析 ……………………………………………………………………………… 212 C.1.1 实验目的………………………………………………………………………… 212 C.1.2 实验要求………………………………………………………………………… 212 C.1.3 词法分析程序的算法思想………………………………………………………… 213 C.1.4 词法分析程序的 C 语言程序框架 ………………………………………………… 214 C. 2 语法分析 ……………………………………………………………………………… 219 C.2. 1 实验目的………………………………………………………………………… 219 C.2.2 实验要求………………………………………………………………………… 219 C.2.3 语法分析程序的算法思想………………………………………………………… 219 C 2.4 语法分析程序的 C 语言程序框架 ………………………………………………… 221 C.3 语义分析 ……………………………………………………………………………… 222 C.3.1 实验目的………………………………………………………………………… 222 C.3.2 实验要求………………………………………………………………………… 222 C.3.3 语义分析程序的 C 语言程序框架 ………………………………………………… 223 C.4 算符优先分析法………………………………………………………………………… 225 C.5 实验实例 ……………………………………………………………………………… 226 C.6 正规式转换成自动机的图形表示………………………………………………………… 244 C.6.1 实验目的………………………………………………………………………… 244 C. 6.2 实验要求………………………………………………………………………… 244 C.6.3 参考设计思路 …………………………………………………………………… 244 C.6.4 参考算法 …………………………………………………………………………245 附录 D 自测练习题与习题参考答案 …………………………………………………………248 参考文献………………………………………………………………………………………… 269
你还可能感兴趣
我要评论
|