编译原理与技术

作 者张莉 黄春 田玲 王生原 蒋竞
单 位北京航空航天大学
内容提要
本书为教育部“计算机领域本科教育教学改革试点工作计划”(“101计划”)编译原理课程项目规划教材。本书侧重编译基础,融入前沿技术,旨在着力培养未来能够突破基础研究和应用创新的计算机领域领军人才。 全书共分四部分。第一部分(1~8章)为基础篇,包含语言与文法基础以及从词法分析到代码生成的编译全过程,力求为学生描绘从源代码到中间代码的一个完整翻译过程。第二部分(9~11章)对程序分析和编译优化做专门讲解,突出面向特定硬件平台的代码生成和优化,培养学生的社会责任感和使命感,为国产硬件构建生态环境提供人才基础。第三部分(12~14章)介绍编译程序生成工具,让学生掌握程序自动生成的基础方法,培养学生的抽象思维和形式化描述与推理能力。第四部分(15~16章)对当前最流行的编译器实例进行深入分析,并介绍一些高级编译技术。 本书可作为本科计算机类专业编译原理或者编译技术课程教材,也可供相关技术人员参考使用。
前言

本书为教育部“计算机领域本科教育教学改革试点工作计划”(“101计划”)编译原理课程项目规划教材。承载着“101计划”中编译原理课程建设的重任,编译原理课程团队在调研国内外编译教学现状以及产业需求后,完成了编译课程知识图谱的构建,精心规划了编译课程系列教材。

编译原理与技术是计算机专业的一门非常重要的课程,是理解程序运行机理和程序安全的基础。本书定位为计算机类专业本科生的第一门编译课程的教材,着重介绍编译领域涉及的基础和通用原理,适当融入前沿技术。限于篇幅,对于现代编译器的一些工程化方法和优化技术涉及不多。

虽然本书重在介绍编译系统的构造和相关原理与技术,但是在这个过程中,也介绍并讨论了计算机/软件领域四个非常重要的原理/概念和技术:1)程序设计语言基础及其工作原理。2)程序/模型间转换的方法:实现模型从一种语言表达形式到另一种语言表达形式的(语义)等价转换方法及其相关技术。3)程序分析和程序理解技术。4)软件系统的概念。对于大多数本科生而言,编译系统是他们构造的第一个相对完整的软件系统,因此本书强调编译过程和编译系统的完整性。

为此将教材内容分为四个部分:1)基础篇:从源代码到中间代码的一个完整翻译过程;2)编译优化与代码生成;3)编译器的自动生成技术;4)编译器实例分析与高级编译技术。其中,第一部分建议各类高校作为必修内容,以保证编译过程的完整性,令学生充分理解高级程序设计语言的工作机理;第二部分、第三部分和第四部分的章节为进阶内容,各高校可根据情况选用。整体内容结构如下图所示。

第一部分作为基础篇,重在强调程序语言基础和编译的根本任务:翻译,即程序从一种语言形式到另一种语言形式的等价翻译。首先介绍程序语言基础和文法基础,在此基础上,以编译器实际工作时的流程作为脉络,从语言和文法基础开始,讲到语义分析和代码生成,力求为学生描绘一个完整的编译(翻译)过程。相比于现有的编译教材的知识体系,增加了程序设计语言的介绍和语言设计基础知识、部分开源编译器的介绍,以及面向对象和函数式语言等现代化语言范式。为了突出编译过程的完整性,降低学生入门学习的难度,打破传统按阶段讲解的顺序,将复杂的自动生成技术和优化技术从编译过程中剥离出来,形成课程的“基础篇”,便于学生理解和掌握一个完整的编译过程和编译系统,理解高级语言的运行机理。

第二部分丰富了程序分析和编译优化的讲解,适当突出面向特定硬件平台的代码生成和优化,为国产硬件构建生态环境提供人才基础,同时培养学生的社会责任感和使命感。第三部分将编译器的自动生成技术独立作为一篇,让学生掌握程序自动生成的基础方法,培养学生的抽象思维和形式化描述与推理能力,并介绍Yacc等编译程序生成工具,培养学生具备利用已有工具自动生成相关代码的能力。第四部分希望与为“101计划”编译课程组编写的另外一本教材《高级编译原理与技术》形成配合,本书仅对相关高级原理与技术做一个简介和引导,便于有兴趣的学生继续深入学习。

我们衷心地希望,通过学习本书及其配套实验教材,可以达成以下培养目标:1)了解现代编程语言的特点和主流编译技术,知晓开源编译有关系统;2)掌握编译系统的功能、原理和构造方法,理解高级程序设计语言的运行机理;3)具备完整小型编译系统的设计、实现和测试的能力,从而理解将一种程序设计语言程序到另一种程序等价转化的理论和方法;4)掌握目前主流编译优化技术,具备针对特定硬件平台进行编译优化能力,理解程序的安全问题;5)掌握形式语言以及自动机理论在编译器前端自动生成中的应用,理解不同方法和工具的作用和局限性,并学会一种程序自动生成技术;6)能够综合利用已有知识(程序设计、数据结构、计算机组成原理、软件工程等课程知识)解决复杂问题。

帮助读者达成以上目标也是我们不遗余力地建设编译课程和编写本套教材的初心。

本书的完成,凝聚着“101计划”编译课程项目教材建设团队全体教师的心血。北京航空航天大学张莉教授负责本书的整体结构设计,并负责编写第4、7、8和14章;国防科技大学黄春研究员负责编写第9、10、11、15章和第16章的16.2—16.4节;电子科技大学田玲教授负责编写第1、2、13章;清华大学王生原副教授负责编写第5、6章和第16章的16.1节;北京航空航天大学蒋竞副教授负责编写第3、12章。武汉大学何炎祥教授负责对全书进行审校。本书在编写过程中参考和引用了国内外优秀编译教材和著作中的相关内容,在此谨向原书著(译)者深表敬意和感谢。同时感谢“101计划”编译原理虚拟教研室全体教师共同参与了调研和知识体系的构建。本书难免还有不少疏漏和差错,欢迎读者批评指正,以便在本书再版时进行修正。

目录

第一部分 基础篇

第 1 章 编译概述

1.1 什么是程序设计语言

1.2 编译程序相关处理系统

1.3 开源编译器

1.4 编译技术应用

第 2 章 语言和文法基础

2.1 文法的表示形式

2.2 符号和符号串

2.3 文法和语言

2.4 扩充的 BNF 表示和语法图练习 2

第 3 章 词法分析程序的设计

3.1 词法分析程序的功能及实现方案

3.2 单词的种类及词法分析程序的输出形式

3.3 正则文法及其状态图

3.4 词法分析程序的设计与实现

第 4 章 语法分析:递归下降分析法

4.1 语法分析概述

4.2 自顶向下分析方法及问题分析

4.3 递归下降分析法(递归子程序法)

4.4 基于递归下降分析法的语法分析程序构造

4.5 错误处理

第 5 章 符号表

5.1 符号表的作用

5.2 符号的常见属性

5.3 符号表的结构与实现

5.4 块结构语言基于静态嵌套作用域的符号表组织与管理

5.5 影响符号访问规则与查找方式的其他典型语言特性

第 6 章 运行时的存储组织及管理

6.1 运行时存储组织的作用与任务

6.2 程序运行时存储空间的布局

6.3 存储分配策略

6.4 活动记录

6.5 函数 / 过程调用与参数传递

6.6 垃圾回收

6.7 面向对象语言的运行时组织

6.8 函数式语言的运行时组织

第 7 章 语法制导翻译技术

7.1 翻译文法

7.2 语法制导翻译

7.3 属性翻译文法

7.4 自顶向下语法制导翻译

第 8 章 语义分析和中间代码生成

8.1 语义分析概述

8.2 源程序的中间形式

8.3 声明语句的处理

8.4 表达式

8.5 赋值语句

8.6 控制语句

8.7 过程调用和返回

8.8 输入输出语句

8.9 编译程序的辅助功能

第二部分 编译优化与代码生成

第 9 章 控制流和数据流

9.1 控制流分析

9.2 数据流分析

第 10 章 代码优化技术

10.1 代码优化概述

10.2 基本块内优化

10.3 全局优化

10.4 循环优化

第 11 章 目标代码生成及优化

11.1 代码生成涉及的问题

11.2 微处理器体系结构简介

11.3 指令选择

11.4 寄存器的分配和指派

11.5 指令调度

第三部分 编译器的自动生成技术

第 12 章 词法分析程序的自动生成技术

12.1 正则文法与正则表达式

12.2 有穷自动机

12.3 词法分析程序的自动生成器

第 13 章 语法分析器的自动生成技术

13.1 LL(1) 分析法

13.2 自底向上分析法及问题分析

13.3 算符优先分析法

13.4 LR 语法分析方法

13.5 语法分析器的生成器 Yacc

第 14 章 语法制导翻译技术Ⅱ

14.1 LL(1) 文法的语法制导翻译

14.2 自底向上语法制导翻译

第四部分 编译器实例分析与高级编译技术

第 15 章 LLVM 编译器架构

15.1 LLVM 核心

15.2 Clang

15.3 MLIR

第 16 章 高级编译技术

16.1 可信编译

16.2 深度学习编译

16.3 无处不在的并行

16.4 “存储墙”(局部性优化)

App 下载
关注我们