注册 登录 进入教材巡展
#

出版时间:2024-09-09

出版社:高等教育出版社

以下为《编译原理与技术》的配套数字资源,这些资源在您购买图书后将免费附送给您:
  • 高等教育出版社
  • 9787040619867
  • 1
  • 528704
  • 平装
  • 16开
  • 2024-09-09
  • 740
  • 544
内容简介

本书为教育部“计算机领域本科教育教学改革试点工作计划”(“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 数据库查询优化
   练习1
  第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 语法图
   练习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 词法分析程序的实现
   练习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 错误处理技术
   练习4
  第5章 符号表
   5.1 符号表的作用
   5.2 符号的常见属性
   5.3 符号表的结构与实现
   5.4 块结构语言基于静态嵌套作用域的符号表组织与管理
    5.4.1 单符号表的组织与管理
    5.4.2 多符号表的组织与管理
   *5.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 函数记忆簿与惰性求值
   练习6
  第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 属性翻译文法的自顶向下翻译
   练习7
  第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 编译程序的辅助功能
   练习8
 第二部分 编译优化与代码生成
  第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 静态单一赋值
   练习9
  第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 循环展开
   练习10
  第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 全局调度
   练习11
 第三部分 编译器的自动生成技术
  第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的实现
   练习12
  第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例子
   练习13
  第14章 语法制导翻译技术Ⅱ
   *14.1 LL(1)文法的语法制导翻译
    *14.1.1 翻译文法的自顶向下翻译-LL(1)翻译器
    *14.1.2 属性文法自顶向下翻译的实现——下推机法
   14.2 自底向上语法制导翻译
    14.2.1 波兰翻译
    14.2.2 S-属性文法
   练习14
 第四部分 编译器实例分析与高级编译技术
  第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 寄存器重用
 参考文献