顶部
收藏

编译原理与技术


作者:
张莉 黄春 田玲 王生原 蒋竞
定价:
75.00 元
版面字数:
740千字
开本:
16开
装帧形式:
平装
版次:
1
最新版次
印刷时间:
2026年
ISBN:
978-7-04-061986-7
物料号:
61986-A0
出版时间:
2024-09-06
读者对象:
高等教育
一级分类:
计算机/教育技术类
二级分类:
软件工程专业课程

本书为教育部“计算机领域本科教育教学改革试点工作计划”(“101计划”)编译原理课程项目规划教材。本书侧重编译基础,融入前沿技术,旨在着力培养未来能够突破基础研究和应用创新的计算机领域领军人才。

全书共分四部分。第一部分(1~8章)为基础篇,包含语言与文法基础以及从词法分析到代码生成的编译全过程,力求为学生描绘从源代码到中间代码的一个完整翻译过程。第二部分(9~11章)对程序分析和编译优化做专门讲解,突出面向特定硬件平台的代码生成和优化,培养学生的社会责任感和使命感,为国产硬件构建生态环境提供人才基础。第三部分(12~14章)介绍编译程序生成工具,让学生掌握程序自动生成的基础方法,培养学生的抽象思维和形式化描述与推理能力。第四部分(15~16章)对当前最流行的编译器实例进行深入分析,并介绍一些高级编译技术。

本书可作为本科计算机类专业编译原理或者编译技术课程教材,也可供相关技术人员参考使用。

  • 目录
    • 前辅文
      • 第一部分 基础篇
        • 第1章 编译概述
          • 1.1 什么是程序设计语言
            • 1.1.1 程序设计语言的定义方法
              • 1.1.2 程序设计语言发展历程与新一代编程语言
                • 1.1.3 程序设计语言的处理系统
                  • 1.1.4 编译程序和解释程序
                  • 1.2 编译程序相关处理系统
                    • 1.2.1 翻译程序
                      • 1.2.2 预处理器
                        • 1.2.3 宏处理器
                          • 1.2.4 编译程序
                            • 1.2.5 程序设计环境
                            • 1.3 开源编译器
                              • 1.3.1 GCC
                                • 1.3.2 LLVM/clang
                                  • 1.3.3 其他开源编译器
                                  • 1.4 编译技术应用
                                    • 1.4.1 程序理解工具
                                      • 1.4.2 软件测试工具
                                        • 1.4.3 自然语言处理
                                          • 1.4.4 数据库查询优化
                                          • 练习
                                          • 第2章 语言和文法基础
                                            • 2.1 文法的表示形式
                                              • 2.1.1 语法树
                                                • 2.1.2 规则
                                                  • 2.1.3 由规则推导句子
                                                  • 2.2 符号和符号串
                                                    • 2.2.1 字母表和符号串
                                                      • 2.2.2 符号串及其集合运算
                                                      • 2.3 文法和语言
                                                        • 2.3.1 文法的形式定义
                                                          • 2.3.2 语言的形式定义
                                                            • 2.3.3 文法和语言分类
                                                              • 2.3.4 推导的定义及语法树的生成
                                                                • 2.3.5 递归规则和递归文法
                                                                  • 2.3.6 短语、直接短语和句柄
                                                                    • 2.3.7 文法的二义性
                                                                      • 2.3.8 有关文法的实用限制
                                                                      • 2.4 扩充的BNF表示和语法图
                                                                        • 2.4.1 扩充的BNF表示
                                                                          • 2.4.2 语法图
                                                                          • 练习
                                                                          • 第3章 词法分析程序的设计
                                                                            • 3.1 词法分析程序的功能及实现方案
                                                                              • 3.2 单词的种类及词法分析程序的输出形式
                                                                                • 3.2.1 单词的种类
                                                                                  • 3.2.2 词法分析程序的输出形式
                                                                                  • 3.3 正则文法及其状态图
                                                                                    • 3.3.1 状态图
                                                                                      • 3.3.2 状态图的使用
                                                                                      • 3.4 词法分析程序的设计与实现
                                                                                        • 3.4.1 文法及其状态图
                                                                                          • 3.4.2 词法分析程序的构造
                                                                                            • 3.4.3 词法分析程序的实现
                                                                                            • 练习
                                                                                            • 第4章 语法分析:递归下降分析法
                                                                                              • 4.1 语法分析概述
                                                                                                • 4.1.1 语法分析程序的功能
                                                                                                  • 4.1.2 语法分析的分类
                                                                                                  • 4.2 自顶向下分析方法及问题分析
                                                                                                    • 4.2.1 带回溯的自顶向下分析方法
                                                                                                      • 4.2.2 存在的问题及解决办法
                                                                                                      • 4.3 递归下降分析法(递归子程序法)
                                                                                                        • 4.4 基于递归下降分析法的语法分析程序构造
                                                                                                          • 4.5 错误处理
                                                                                                            • 4.5.1 概述
                                                                                                              • 4.5.2 错误的分类
                                                                                                                • 4.5.3 错误的诊察与报告
                                                                                                                  • 4.5.4 错误处理技术
                                                                                                                  • 练习
                                                                                                                  • 第5章 符号表
                                                                                                                    • 5.1 符号表的作用
                                                                                                                      • 5.2 符号的常见属性
                                                                                                                        • 5.3 符号表的结构与实现
                                                                                                                          • 5.4 块结构语言基于静态嵌套作用域的符号表组织与管理
                                                                                                                            • 5.4.1 单符号表的组织与管理
                                                                                                                              • 5.4.2 多符号表的组织与管理
                                                                                                                              • *5.5 影响符号访问规则与查找方式的其他典型语言特性
                                                                                                                                • 练习
                                                                                                                                • 第6章 运行时的存储组织及管理
                                                                                                                                  • 6.1 运行时存储组织的作用与任务
                                                                                                                                    • 6.2 程序运行时存储空间的布局
                                                                                                                                      • 6.3 存储分配策略
                                                                                                                                        • 6.3.1 静态存储分配
                                                                                                                                          • 6.3.2 栈式存储分配
                                                                                                                                            • 6.3.3 堆式存储分配
                                                                                                                                            • 6.4 活动记录
                                                                                                                                              • 6.4.1 活动记录的创建与撤销
                                                                                                                                                • 6.4.2 活动记录中的局部数据示例
                                                                                                                                                  • 6.4.3 嵌套过程/函数定义中非局部量的访问
                                                                                                                                                    • 6.4.4 嵌套语句块的非局部量访问
                                                                                                                                                      • *6.4.5 动态作用域规则下的非局部量访问
                                                                                                                                                      • 6.5 函数/过程调用与参数传递
                                                                                                                                                        • 6.5.1 典型的函数/过程调用序列
                                                                                                                                                          • 6.5.2 参数传递方式
                                                                                                                                                          • *6.6 垃圾回收
                                                                                                                                                            • 6.6.1 概述
                                                                                                                                                              • 6.6.2 引用计数
                                                                                                                                                                • 6.6.3 标记-清除
                                                                                                                                                                  • 6.6.4 复制回收
                                                                                                                                                                    • 6.6.5 分代回收
                                                                                                                                                                      • 6.6.6 增量回收
                                                                                                                                                                      • *6.7 面向对象语言的运行时组织
                                                                                                                                                                        • 6.7.1 “类”和“对象”的角色
                                                                                                                                                                          • 6.7.2 面向对象程序的运行时特征
                                                                                                                                                                            • 6.7.3 对象的存储组织
                                                                                                                                                                              • 6.7.4 例程/方法的动态绑定
                                                                                                                                                                                • 6.7.5 其他话题
                                                                                                                                                                                • *6.8 函数式语言的运行时组织
                                                                                                                                                                                  • 6.8.1 “等式推理”与“高阶函数”
                                                                                                                                                                                    • 6.8.2 函数式程序的运行时存储特征
                                                                                                                                                                                      • 6.8.3 闭包的存储组织
                                                                                                                                                                                        • 6.8.4 尾调用/尾递归的活动记录
                                                                                                                                                                                          • 6.8.5 函数记忆簿与惰性求值
                                                                                                                                                                                          • 练习
                                                                                                                                                                                          • 第7章 语法制导翻译技术
                                                                                                                                                                                            • 7.1 翻译文法
                                                                                                                                                                                              • 7.2 语法制导翻译
                                                                                                                                                                                                • 7.3 属性翻译文法
                                                                                                                                                                                                  • 7.3.1 综合属性
                                                                                                                                                                                                    • 7.3.2 继承属性
                                                                                                                                                                                                      • 7.3.3 属性翻译文法
                                                                                                                                                                                                        • 7.3.4 属性翻译文法举例——算术表达式的翻译
                                                                                                                                                                                                        • 7.4 自顶向下语法制导翻译
                                                                                                                                                                                                          • 7.4.1 翻译文法的自顶向下翻译
                                                                                                                                                                                                            • 7.4.2 属性翻译文法的自顶向下翻译
                                                                                                                                                                                                            • 练习
                                                                                                                                                                                                            • 第8章 语义分析和中间代码生成
                                                                                                                                                                                                              • 8.1 语义分析概述
                                                                                                                                                                                                                • 8.2 源程序的中间形式
                                                                                                                                                                                                                  • 8.2.1 波兰表示
                                                                                                                                                                                                                    • 8.2.2 N-元表示和三地址代码
                                                                                                                                                                                                                      • 8.2.3 抽象语法树
                                                                                                                                                                                                                        • 8.2.4 抽象机代码
                                                                                                                                                                                                                          • 8.2.5 栈式抽象机及其汇编指令
                                                                                                                                                                                                                          • 8.3 声明语句的处理
                                                                                                                                                                                                                            • 8.3.1 常量类型
                                                                                                                                                                                                                              • 8.3.2 简单变量
                                                                                                                                                                                                                                • 8.3.3 数组变量
                                                                                                                                                                                                                                  • 8.3.4 指针变量
                                                                                                                                                                                                                                    • 8.3.5 记录变量
                                                                                                                                                                                                                                      • 8.3.6 过程声明
                                                                                                                                                                                                                                      • 8.4 表达式
                                                                                                                                                                                                                                        • 8.5 赋值语句
                                                                                                                                                                                                                                          • 8.6 控制语句
                                                                                                                                                                                                                                            • 8.6.1 if语句
                                                                                                                                                                                                                                              • 8.6.2 分情形语句
                                                                                                                                                                                                                                                • 8.6.3 repeat-while语句
                                                                                                                                                                                                                                                  • 8.6.4 for循环语句
                                                                                                                                                                                                                                                  • 8.7 过程调用和返回
                                                                                                                                                                                                                                                    • 8.7.1 参数的基本传递形式
                                                                                                                                                                                                                                                      • 8.7.2 过程调用
                                                                                                                                                                                                                                                        • 8.7.3 返回语句和过程终止
                                                                                                                                                                                                                                                        • 8.8 输入输出语句
                                                                                                                                                                                                                                                          • 8.8.1 输入语句
                                                                                                                                                                                                                                                            • 8.8.2 输出语句
                                                                                                                                                                                                                                                            • 8.9 编译程序的辅助功能
                                                                                                                                                                                                                                                              • 练习
                                                                                                                                                                                                                                                            • 第二部分 编译优化与代码生成
                                                                                                                                                                                                                                                              • 第9章 控制流和数据流
                                                                                                                                                                                                                                                                • 9.1 控制流分析
                                                                                                                                                                                                                                                                  • 9.1.1 基本块和控制流图
                                                                                                                                                                                                                                                                    • 9.1.2 必经节点
                                                                                                                                                                                                                                                                      • 9.1.3 循环
                                                                                                                                                                                                                                                                      • 9.2 数据流分析
                                                                                                                                                                                                                                                                        • 9.2.1 数据流分析的基本方法
                                                                                                                                                                                                                                                                          • 9.2.2 到达定值分析
                                                                                                                                                                                                                                                                            • 9.2.3 活跃变量分析
                                                                                                                                                                                                                                                                              • 9.2.4 迭代的数据流分析框架
                                                                                                                                                                                                                                                                                • 9.2.5 其他数据流问题
                                                                                                                                                                                                                                                                                  • 9.2.6 静态单一赋值
                                                                                                                                                                                                                                                                                  • 练习
                                                                                                                                                                                                                                                                                  • 第10章 代码优化技术
                                                                                                                                                                                                                                                                                    • 10.1 代码优化概述
                                                                                                                                                                                                                                                                                      • 10.2 基本块内优化
                                                                                                                                                                                                                                                                                        • 10.2.1 基本块的DAG表示
                                                                                                                                                                                                                                                                                          • 10.2.2 基于DAG的局部优化
                                                                                                                                                                                                                                                                                            • 10.2.3 数组、指针及函数调用
                                                                                                                                                                                                                                                                                              • 10.2.4 从DAG图重新导出中间代码
                                                                                                                                                                                                                                                                                              • 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 循环展开
                                                                                                                                                                                                                                                                                                            • 练习
                                                                                                                                                                                                                                                                                                            • 第11章 目标代码生成及优化
                                                                                                                                                                                                                                                                                                              • 11.1 代码生成涉及的问题
                                                                                                                                                                                                                                                                                                                • 11.2 微处理器体系结构简介
                                                                                                                                                                                                                                                                                                                  • 11.2.1 指令集架构
                                                                                                                                                                                                                                                                                                                    • 11.2.2 流水线
                                                                                                                                                                                                                                                                                                                      • 11.2.3 存储层次
                                                                                                                                                                                                                                                                                                                        • 11.2.4 RISC-V架构
                                                                                                                                                                                                                                                                                                                        • 11.3 指令选择
                                                                                                                                                                                                                                                                                                                          • 11.3.1 低层次的中间表示
                                                                                                                                                                                                                                                                                                                            • 11.3.2 基于树模式匹配的指令选择
                                                                                                                                                                                                                                                                                                                              • 11.3.3 基于窥孔匹配的指令选择
                                                                                                                                                                                                                                                                                                                              • 11.4 寄存器的分配和指派
                                                                                                                                                                                                                                                                                                                                • 11.4.1 局部寄存器分配和指派
                                                                                                                                                                                                                                                                                                                                  • 11.4.2 网和冲突图
                                                                                                                                                                                                                                                                                                                                    • 11.4.3 基于图着色的全局寄存器分配
                                                                                                                                                                                                                                                                                                                                    • 11.5 指令调度
                                                                                                                                                                                                                                                                                                                                      • 11.5.1 控制依赖
                                                                                                                                                                                                                                                                                                                                        • 11.5.2 数据依赖和数据依赖图
                                                                                                                                                                                                                                                                                                                                          • 11.5.3 表调度
                                                                                                                                                                                                                                                                                                                                            • 11.5.4 全局调度
                                                                                                                                                                                                                                                                                                                                            • 练习
                                                                                                                                                                                                                                                                                                                                          • 第三部分 编译器的自动生成技术
                                                                                                                                                                                                                                                                                                                                            • 第12章 词法分析程序的自动生成技术
                                                                                                                                                                                                                                                                                                                                              • 12.1 正则文法与正则表达式
                                                                                                                                                                                                                                                                                                                                                • 12.1.1 正则表达式
                                                                                                                                                                                                                                                                                                                                                  • 12.1.2 正则文法转换为正则表达式
                                                                                                                                                                                                                                                                                                                                                    • 12.1.3 正则表达式转换为正则文法
                                                                                                                                                                                                                                                                                                                                                    • 12.2 有穷自动机
                                                                                                                                                                                                                                                                                                                                                      • 12.2.1 确定的有穷自动机
                                                                                                                                                                                                                                                                                                                                                        • 12.2.2 不确定的有穷自动机
                                                                                                                                                                                                                                                                                                                                                          • 12.2.3 NFA的确定化
                                                                                                                                                                                                                                                                                                                                                            • 12.2.4 确定有穷自动机的化简(最小化)
                                                                                                                                                                                                                                                                                                                                                              • 12.2.5 正则表达式与有穷自动机的等价性
                                                                                                                                                                                                                                                                                                                                                                • 12.2.6 正则文法与有穷自动机的等价性
                                                                                                                                                                                                                                                                                                                                                                • 12.3 词法分析程序的自动生成器
                                                                                                                                                                                                                                                                                                                                                                  • 12.3.1 Lex源程序(Lex的输入文件)
                                                                                                                                                                                                                                                                                                                                                                    • 12.3.2 Lex的实现
                                                                                                                                                                                                                                                                                                                                                                    • 练习
                                                                                                                                                                                                                                                                                                                                                                    • 第13章 语法分析器的自动生成技术
                                                                                                                                                                                                                                                                                                                                                                      • 13.1 LL(1)分析法
                                                                                                                                                                                                                                                                                                                                                                        • 13.1.1 LL(1)分析器的逻辑结构及工作过程
                                                                                                                                                                                                                                                                                                                                                                          • 13.1.2 LL(1)分析表的构造方法
                                                                                                                                                                                                                                                                                                                                                                          • 13.2 自底向上分析法及问题分析
                                                                                                                                                                                                                                                                                                                                                                            • 13.2.1 规约
                                                                                                                                                                                                                                                                                                                                                                              • 13.2.2 句柄剪枝
                                                                                                                                                                                                                                                                                                                                                                                • 13.2.3 移入-归约语法分析技术
                                                                                                                                                                                                                                                                                                                                                                                  • 13.2.4 移入-归约语法分析中的冲突
                                                                                                                                                                                                                                                                                                                                                                                  • 13.3 算符优先分析法
                                                                                                                                                                                                                                                                                                                                                                                    • 13.3.1 算符优先分析法
                                                                                                                                                                                                                                                                                                                                                                                      • 13.3.2 算符优先关系矩阵的自动生成
                                                                                                                                                                                                                                                                                                                                                                                      • 13.4 LR语法分析方法
                                                                                                                                                                                                                                                                                                                                                                                        • 13.4.1 LR分析法概述
                                                                                                                                                                                                                                                                                                                                                                                          • 13.4.2 LR分析法的一般过程和算法
                                                                                                                                                                                                                                                                                                                                                                                            • 13.4.3 SLR语法分析法及分析器构造
                                                                                                                                                                                                                                                                                                                                                                                              • 13.4.4 规范LR语法分析法及分析器构造
                                                                                                                                                                                                                                                                                                                                                                                                • 13.4.5 LALR语法分析法及分析器构造
                                                                                                                                                                                                                                                                                                                                                                                                • 13.5 语法分析器的生成器Yacc
                                                                                                                                                                                                                                                                                                                                                                                                  • 13.5.1 Yacc原理
                                                                                                                                                                                                                                                                                                                                                                                                    • 13.5.2 Yacc进阶
                                                                                                                                                                                                                                                                                                                                                                                                      • 13.5.3 Yacc例子
                                                                                                                                                                                                                                                                                                                                                                                                      • 练习
                                                                                                                                                                                                                                                                                                                                                                                                      • 第14章 语法制导翻译技术Ⅱ
                                                                                                                                                                                                                                                                                                                                                                                                        • *14.1 LL(1)文法的语法制导翻译
                                                                                                                                                                                                                                                                                                                                                                                                          • *14.1.1 翻译文法的自顶向下翻译-LL(1)翻译器
                                                                                                                                                                                                                                                                                                                                                                                                            • *14.1.2 属性文法自顶向下翻译的实现——下推机法
                                                                                                                                                                                                                                                                                                                                                                                                            • 14.2 自底向上语法制导翻译
                                                                                                                                                                                                                                                                                                                                                                                                              • 14.2.1 波兰翻译
                                                                                                                                                                                                                                                                                                                                                                                                                • 14.2.2 S-属性文法
                                                                                                                                                                                                                                                                                                                                                                                                                • 练习
                                                                                                                                                                                                                                                                                                                                                                                                              • 第四部分 编译器实例分析与高级编译技术
                                                                                                                                                                                                                                                                                                                                                                                                                • 第15章 LLVM编译器架构
                                                                                                                                                                                                                                                                                                                                                                                                                  • 15.1 LLVM核心
                                                                                                                                                                                                                                                                                                                                                                                                                    • 15.1.1 LLVM IR
                                                                                                                                                                                                                                                                                                                                                                                                                      • 15.1.2 优化器
                                                                                                                                                                                                                                                                                                                                                                                                                        • 15.1.3 代码生成器
                                                                                                                                                                                                                                                                                                                                                                                                                        • 15.2 Clang
                                                                                                                                                                                                                                                                                                                                                                                                                          • 15.2.1 Clang处理流程
                                                                                                                                                                                                                                                                                                                                                                                                                            • 15.2.2 Clang抽象语法树
                                                                                                                                                                                                                                                                                                                                                                                                                            • 15.3 MLIR
                                                                                                                                                                                                                                                                                                                                                                                                                              • 15.3.1 MLIR
                                                                                                                                                                                                                                                                                                                                                                                                                                • 15.3.2 MLIR示例
                                                                                                                                                                                                                                                                                                                                                                                                                              • 第16章 高级编译技术
                                                                                                                                                                                                                                                                                                                                                                                                                                • 16.1 可信编译
                                                                                                                                                                                                                                                                                                                                                                                                                                  • 16.1.1 引子
                                                                                                                                                                                                                                                                                                                                                                                                                                    • 16.1.2 基于语言的安全性
                                                                                                                                                                                                                                                                                                                                                                                                                                      • 16.1.3 编译器的形式化验证
                                                                                                                                                                                                                                                                                                                                                                                                                                        • 16.1.4 编译器形式化验证的成功案例:CompCert
                                                                                                                                                                                                                                                                                                                                                                                                                                        • 16.2 深度学习编译
                                                                                                                                                                                                                                                                                                                                                                                                                                          • 16.2.1 深度学习编译器架构
                                                                                                                                                                                                                                                                                                                                                                                                                                            • 16.2.2 深度学习编程语言
                                                                                                                                                                                                                                                                                                                                                                                                                                              • 16.2.3 深度学习编译器中间表示
                                                                                                                                                                                                                                                                                                                                                                                                                                                • 16.2.4 深度学习编译优化
                                                                                                                                                                                                                                                                                                                                                                                                                                                • 16.3 无处不在的并行
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • 16.3.1 提高指令级并行的编译优化
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • 16.3.2 向量化
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • 16.3.3 并行化
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • 16.4 “存储墙”(局部性优化)
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 16.4.1 指令Cache优化
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 16.4.2 数据Cache优化
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 16.4.3 寄存器重用
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • 参考文献

                                                                                                                                                                                                                                                                                                                                                                                                                                                        相关图书