本书语言流畅,结构合理,内容丰富,是作者总结多年来编译原理双语教学实践的基础上,参考各种国内外资料守成的。全部内容经国内及国外的专家审阅,有助于提高广大师生的专业理论水平和编程能力,尤其有助于提高读者专业外语水平。
“编译原理与实践”是计算机专业课中一门非常重要的课程。编写这本书的目的是要帮助计算机专业的学生以及相关的专业人员系统地学习程序设计语言的编译过程,掌握编译程序的原理,了解编译程序的基本结构并且能够设计简单的编译程序。本书用中英双语介绍编译程序的整个编译过程,重点讨论了词法分析、语法分析、语义分析、中间代码的生成、代码优化以及生成目标代码的问题。
第1章 编译程序概述
1.1 概念
1.2 源程序的分析
1.2.1 词法分析器
1.2.2 语法分析器
1.2.3 语义分析
1.2.4 中间代码生成器
1.2.5 代码优化
1.2.6 代码生成
1.2.7 出错表
1.2.8 符号表
1.3 总结
1.4 编译器的遍
1.5 实例1——编译器程序
1.5.1 词法分析器
1.5.2 语法分析器
1.5.3 代码生成器
1.6 实例2——使用二具Flex
第2章 形式语言
2.1 符号串
2.2 文法和形式语言
2.3 语法树和二义性
2.4 扩充BNF范式
2.5 文法的分类
2.6 正则文法
第3章 词法分析
3.1 词法分析器的作用
3.2 词法分析器的设计
3.3 有穷自动机
3.3.1 确定有穷自动机
3.3.2 非确定有穷自动机
3.3.3 从非确定有穷自动机到确定有穷自动机的转换
3.3.4 最小化DFA
3.3.5 有ε输入符号的状态子集的ε闭包
3.3.6 从正则表达式到DFA 转换举例
第4章 自顶向下语法分析
4.1 文法的实用限制
4.2 头符号集和后继符号集
4.3 避免回溯
4.4 自顶向下语法分析方法
4.4.1 递归子程序法
4.4.2 LL(1)方法
第5章 自底向上语法分析
5.1 算符优先分析法
5.1.1 算符优先的关系
5.1.2 构造算符优先关系
5.1.3 算符优先关系文法
5.1.4 最左素短语
5.1.5 算符优先分析算法和程序
5.2 LR(0)分析法
5.2.1 可归前缀
5.2.2 构造识别可归前缀的有穷自动机
5.2.3 项目集的闭包
5.2.4 LR(0)分析表
5.3 SLR(1)分析法
第6章 符号表和类型检查
6.1 符号表的作用
6.2 符号表的属性
6.3 符号表的设计
6.4 符号表的结构
6.4.1 符号表的操作
6.4.2 符号表的结构
6.5 类型检查
第7章 存储组织与分配
7.1 静态存储分配
7.2 动态存储分配
7.2.1 栈分配
7.2.2 嵌套过程的存储分配
7.2.3 堆存储分配
第8章 中间语言
8.1 后缀表示
8.1.1 后缀的定义
8.1.2 E.W.DIJKSTRA方法
8.1.3 扩展后缀
8.2 四元组表示
8.3 三元组表示
8.4 三元组和四元组中间代码的比较
8.5 伪代码
8.6 汇编代码
第9章 代码生成
9.1 目标程序的结构
9.1.1 条件语句目标程序
9.1.2 循环语句目标程序
9.1.3 过程语句目标程序
9.2 代码生成实例
9.2.1 代码生成算法
9.2.2 符号表的作用
第10章 代码优化
10.1 优化类型的分类
10.2 源代码的优化
10.3 三元组代码的优化
10.4 四元组代码的优化
1O.5 目标代码的优化
参考文献