《编译程序设计原理与技术》是一本由
北京邮电大学出版社在2002年出版的书籍。
内容简介
《编译程序设计原理与技术》内容简介:在较多地参考了国内外权威人士著作的基础上,《编译程序设计原理与技术》系统地介绍了编译程序设计的基本原理和技术。其主要内容包括词法分析、语法分析、类型检查、中间代码生成、代码生成和代码优化等。《编译程序设计原理与技术》旨在培养学生发现问题、提出问题,进而分析和解决问题的能力。《编译程序设计原理与技术》内容充实,图文并茂,各章节内容循序渐进,并注意理论与实践的结合,可作为高等院校计算机科学与技术专业的教材或参考书,也可供其他专业的学生或从事计算机工作的工程技术人员阅读参考。
目录
第1章 形式语言与自动机基础
1.1 语言和文法
1.1.1 字母表和符号串
1.1.2 语言
1.1.3 文法及其形式定义
1.1.4 推导和短语
1.1.5 分析树及二义性
1.1.6 文法的变换
1.2 自动机与正规表达式
1.2.2 非确定的有限自动机(NFA)
1.2.3 具有 -转移的非确定的有限自动机
1.2.4 正规文法与有限自动机的等价性
1.2.5 正规表达式与有限自动机的等价性
1.2.6 正规表达式与正规文法
1.2.7 DFA的化简
习题
第2章 编译概述
2.1 翻译和解释
2.1.1 程序设计语言
2.1.2 翻译程序
2.2 编译的阶段
2.2.1 分析阶段
2.2.2 综合阶段
2.2.3 符号表管理
2.2.4 错误处理
2.2.5 前端和后端
2.2.6 “遍”的概念
2.3 编译程序的前后处理器
2.3.1 预处理器
2.3.2 汇编程序
2.3.3 连接装配程序
2.4 编译原理和技术的应用
习题
第3章 词法分析
3.1 词法分析器的作用
3.1.2 分离词法分析器的好处
3.2 词法分析器的输入与输出
3.2.1 设置输入缓冲器的必要性
3.2.2 配对缓冲器
3.2.3 词法分析器的输出
3.3 记号的描述和识别
3.3.1 词法与正规文法
3.3.2 记号的文法
3.4 词法分析程序的设计与实现
3.4.1 文法及状态转换图
3.4.2 词法分析器的构造
3.4.3 词法分析器的实现
3.5 软件工具LEX
3.5.1 LEX规格说明
3.5.2 LEX的工作原理
习题
第4章 语法分析
4.1.1 语法分析器的地位
4.1.2 常用的分析方法
4.1.3 语法错误的处理
4.2 自顶向下分析
4.2.1 递归下降分析方法
4.2.2 预测分析器
4.2.3 非递归的预测分析器
4.3 自底向上分析
4.3.1 规范归约
4.3.2 “移进-归约”方法的实现
4.4 LR分析器
4.4.1 LR分析器的模型及工作过程
4.4.2 SLR分析表的构造
4.4.3 LR(1)分析表的构造
4.4.4 LALR分析表的构造
4.4.5 LR分析方法对二义文法的应用
4.4.6 LR分析的错误处理与恢复
4.5 软件工具YACC
4.5.1 YACC说明文件
4.5.2 用YACC处理二义文法
4.5.4 YACC内部名称
习题
第5章 语法制导翻译技术
5.1 语法制导定义
5.1.1 语法制导定义的形式
5.1.2 综合属性
5.1.3 继承属性
5.1.4 依赖图
5.1.5 计算次序
5.2 S属性定义的自底向上翻译
5.2.1 语法树
5.2.2 构造表达式的语法树
5.2.3 构造表达式的语法树的语法制导定义
5.2.4 表达式的有向非循环图(dag)
5.2.5 S属性定义的自底向上实现
5.3 L属性定义
5.3.1 L属性定义
5.3.2 翻译方案
5.4 L属性定义的自顶向下翻译
5.4.1 消除翻译方案中的左递归
5.4.2 预测翻译器的设计
5.5 L属性定义的自底向上翻译
5.5.1 从翻译方案中去掉嵌入的动作
5.5.2 分析栈中的继承属性
5.5.3 模拟继承属性的计算
5.5.4 用综合属性代替继承属性
5.6 非L属性定义的翻译
5.6.1 从左到右遍历子结点
5.6. 2 其他遍历顺序
习题
第6章 类型检查
6.1 语义分析的概念
6.2 类型体制
6.2.1 类型表达式
6.2.2 类型体制
6.2.3 静态和动态类型检查
6.2.4 错误恢复
6.3 简单类型检查器的说明
6.3.1 语言说明
6.3.2 确定标识符的类型
6.3.3 表达式的类型检查
6.3.4 语句的类型检查
6.4 类型表达式的等价
6.4.1 类型表达式的结构等价
6.4.2 类型表达式的名字等价
6.4.3 类型表示中的环
6.5 类型检查有关的其他主题
6.5.1 函数和运算符的重载
6.5.2 类型转换
6.5.3 多态函数
6.6 符号表
6.6.1 建立和访问符号表的时机
6.6.2 符号表的内容
6.6.3 在符号表上的操作
6.6.4 符号表的组织
习题
第7章 运行时刻环境
7.1 基本概念
7.1.1 过程
7.1.2 活动树
7.1.3 控制栈
7.1.4 声明的作用域
7.1.5 名字的联编
7.2 存储组织
7.2.1 运行时刻内存的划分
7.2.2 活动记录
7.2.3 编译时局部数据的安排
7.3 存储分配策略
7.3.1 静态存储分配
7.3.2 栈式存储分配
7.3.3 堆式存储分配
7.4 访问非局部名字
7.4.1 程序块
7.4.2 非嵌套过程的静态作用域
7.4.3 嵌套过程的静态作用域
7.4.4 动态作用域规则
7.5 参数传递方式
7.5.1 传值调用
7.5.2 引用调用
7.5.3 复制恢复
7.5.4 传名调用
习题
第8章 中间代码生成
8.1 中间语言
8.1.1 图示法
8.1.2 三地址代码
8.1.3 语法制导翻译生成三地址代码
8.2 声明语句的翻译
8.2.1 过程中的声明语句
8.2.2 过程定义的处理
8.2.3 记录声明的处理
8.3 赋值语句的翻译
8.3.1 表达式中仅涉及简单变量的情况
8.3.2 表达式中涉及数组元素的情况
8.3.3 记录中域的访问
8.4.1 翻译布尔表达式的方法
8.4.2 数值表示法
8.4.3 控制流语句
8.4.4 布尔表达式的控制流翻译
8.5 CASE语句的翻译
8.6 回填技术
8.6.1 使用回填技术翻译布尔表达式
8.6.2 使用回填技术翻译控制流语句
8.6.3 标号和转移语句的翻译
8.7 过程调用语句的翻译
习题
第9章 目标代码生成
9.1.1 代码生成器的输入
9.1.2 代码生成器的输出
9.1.3 存储管理
9.1.4 指令选择
9.1.5 寄存器分配
9.1.6 计算次序的选择
9.1.7 代码生成器的设计
9.2 目标机器
9.2.1 目标机器
9.2.2 指令代价
9.3 运行时的存储管理
9.3.1 静态存储分配
9.3.2 栈式存储分配
9.3.3 运行时名字的地址
9.4.1 基本块
9.4.2 控制流图
9.5 下次引用信息
9.6 一个简单的代码生成器
9.6.1 寄存器描述器和地址描述器
9.6.2 函数getreg
9.6.3 代码生成算法
9.6.4 为其他类型的语句生成目标代码
习题
第10章 代码优化
10.1 优化概述
10.1.1 程序优化
10.1.2 优化器的组织
10.1.3 优化的主要种类
10.2 基本块的优化
10.2.1 常数合并及常数传播
10.2.2 删除冗余的公共表达式
10.2.3 复写传播
10.2.4 删除死代码
10.2.5 削弱计算强度
10.2.6 临时变量改名
10.2.7 交换语句的位置
10.3 循环优化
10.3.1 循环展开
10.3.2 频度削弱/代码外提
10.3.3 归纳变量的删除
10.3.4 削弱计算强度
10.4 窥孔优化
10.4.1 冗余传送
10.4.2 死代码
10.4.3 控制流优化
10.4.4 代数化简
10.4.5 强度削弱
10.4.6 利用机器的特点
10.5 dag在代码优化中的应用
10.5.1 基本块的dag的构造
10.5.2 dag的应用
习题
第11章 编译程序的设计与实现
11.1 设计与实现方法
11.1.1 编译程序的实现语言
11.1.2 构造编译程序的自展方法
11.1.3 构造编译程序的移植方法
11.1.4 编译程序构造举例
11.2 编译实践
11.2.1 Sub_P语言说明
11.2.2 Sub_P编译程序的设计说明
11.2.3 Sub_P编译程序的测试
11.2.4 设计报告要求
参考文献