图书简介:
目 录
第1 章引言
1.1 程序的翻译及运行
1.2 编译过程概述
1.3 编译程序的结构框图
1.4 编译程序的开发
1.4.1 编译程序的开发步骤
1.4.2 编译程序的开发技术
1.4.3 编译程序的自动生成
习题1
第2 章形式语言理论基础
2.1 形式语言的基本概念
2.1.1 符号和符号串
2.1.2 符号串的运算
2.2 文法和语言的形式定义
2.3 语法树和二义性
2.3.1 语法树和推导
2.3.2 文法二义性
2.4 文法的实用限制
2.4.1 有害规则
2.4.2 多余规则
2.4.3 文法的实用限制
2.4.4 文法的等价变换
2.4.5 扩充的BNF 表示法
2.5 文法和语言的Chomsky 分类
2.5.1 0 型文法与0 型语言(对应图灵机)
2.5.2 1 型文法与1 型语言(对应线性界限自动机)
2.5.3 2 型文法与2 型语言(对应下推自动机)
2.5.4 3 型文法与3 型语言(对应有限自动机)
2.5.5 四类文法的关系
习题2
第3 章自动机理论基础
3.1 有限自动机的基本概念
3.1.1 有限自动机的定义及表示法
3.1.2 有限自动机的机器模型
3.1.3 确定有限自动机(DFA)
3.1.4 有限自动机在计算机内的表示
3.1.5 不确定有限自动机(NFA)
3.1.6 由NFA 到DFA 的等价转换
3.2 确定有限自动机DFA 的化简
3.2.1 等价状态和无关状态
3.2.2 自动机的化简
3.3 正则表达式形式定义
3.4 下推自动机PDA
3.4.1 下推自动机的机器模型
3.4.2 PDA 的形式定义
习题3
第4 章词法分析
4.1 词法分析概述
4.1.1 词法分析的功能
4.1.2 词法分析的两种处理结构
4.1.3 单词符号的种类
4.1.4 词法分析程序的输出形式
4.2 词法分析程序的设计与实现
4.2.1 词法分析程序流程图
4.2.2 读单词
4.2.3 读无符号数
4.2.4 读标识符
4.3 词法分析程序的自动生成
4.3.1 基本思想
4.3.2 LEX 源程序结构
4.3.3 LEX 编译程序工作过程
4.3.4 LEX 的实现
4.3.5 LEX 的使用方式
习题4
第5 章语法分析——自顶向下分析方法
5.1 自顶向下分析技术
5.2 不确定的自顶向下分析思想
5.2.1 三种终结符号集
5.2.2 自顶向下分析过程中存在的问题及解决办法
5.3 确定的自顶向下分析思想
5.4 LL(K )分析方法
5.4.1 LL(1)分析思想
5.4.2 LL(1)分析方法的逻辑结构
5.4.3 LL(1)分析方法
5.5 递归下降分析法
5.5.1 递归下降分析法的实现思想
5.5.2 递归子程序及其性质
5.5.3 递归下降分析法
习题5
第6 章语法分析——自底向上分析方法
6.1 自底向上语法分析技术
6.1.1 自底向上语法分析思想
6.1.2 自底向上分析难点
6.2 自底向上优先分析方法
6.2.1 简单优先分析方法
6.2.2 算符优先分析方法
6.3 LR(K)分析方法
6.3.1 LR 分析思想及逻辑结构
6.3.2 LR(0)分析方法
6.3.3 SLR(1)分析方法
6.3.4 LR(1)分析方法
6.3.5 LALR(1)分析方法
习题 6
第 7 章语义分析及中间代码生成
7.1 基本概念
7.1.1 语义分析的概念
7.1.2 属性文法技术
7.2 几种常见的中间语言
7.2.1 抽象语法树
7.2.2 逆波兰表示
7.2.3 四元式
7.2.4 三元式
7.3 表达式的翻译
7.3.1 算术表达式的翻译
7.3.2 布尔表达式的翻译
7.4 语句的语法制导翻译
7.4.1 说明语句的翻译
7.4.2 赋值语句的翻译
7.4.3 控制语句的翻译
习题 7
第 8 章代码优化
8.1 代码优化的基本概念
8.1.1 代码优化的定义
8.1.2 代码优化的分类
8.1.3 优化技术简介
8.2 局部优化
8.2.1 基本块的划分
8.2.2 基本块的DAG 表示
8.2.3 基本块优化的实现
8.3 循环优化
8.3.1 循环的查找
8.3.2 循环优化的实现
习题 8
第 9 章目标代码的生成
9.1 目标代码生成程序中的有关问题
9.1.1 目标代码生成程序的输入、输出
9.1.2 目标代码
9.1.3 寄存器分配
9.1.4 运行时的存储管理
9.2 一个计算机模型——虚拟机
9.2.1 虚拟机
9.2.2 虚拟机的汇编指令
9.3 从中间代码生成目标代码
9.3.1 从逆波兰表示生成目标代码
9.3.2 从四元式序列生成目标代码
习题 9
第 10 章符号表
10.1 符号表的组织与内容
10.2 符号表的结构与存放
10.2.1 线性符号表
10.2.2 有序符号表
10.2.3 散列符号表
10.2.4 栈式符号表
10.3 符号表的管理
10.3.1 符号表的建立
10.3.2 符号表的查填
习题 10
第 11 章目标程序运行时的存储组织与分配
11.1 程序运行时的存储组织
11.2 静态存储分配
11.3 栈式动态存储分配
11.3.1 简单的栈式存储分配
11.3.2 嵌套过程语言的栈式存储分配
11.4 堆式动态存储分配
11.5 过程调用与返回
11.6 参数传递机制
习题 11
第 12 章出错处理
12.1 引言
12.1.1 错误存在的必然性
12.1.2 错误的种类
12.1.3 错误复原
12.2 校正词法错误
12.2.1 词法错误的种类
12.2.2 词法错误的校正
12.3 校正语法错误
12.3.1 语法错误的复原
12.3.2 语法错误的校正
12.4 校正语义错误
12.4.1 语义错误的种类
12.4.2 语义错误检查措施
习题 12
第 13 章编译程序自动生成工具简介
13.1 引言
13.1.1 编译程序自动生成工具概述
13.1.2 编译程序自动生成工具的种类及常用工具简介
13.2 词法分析自动生成工具
13.2.1 LEX 系列词法分析自动生成工具简介
13.2.2 其他词法分析自动生成工具简介
13.3 语法分析自动生成工具
13.3.1 YACC 系列语法分析自动生成工具简介
13.3.2 其他语法分析自动生成工具简介
习题 13
第 14 章面向对象语言的编译
14.1 概述
14.1.1 面向对象语言的基本特征
14.1.2 类和成员的属性构造
14.1.3 面向对象编译程序的特点
14.2 面向对象语言的编译
14.2.1 单一继承
14.2.2 多重继承
14.2.3 多态性
14.2.4 动态绑定
14.2.5 接口类型
14.3 面向对象的动态存储分配
14.3.1 对象的存储区管理方式
14.3.2 静态模型和栈式模型废弃单元的回收
14.3.3 堆式模型废弃单元的回收
习题 14
第 15 章并行编译技术
15.1 并行计算机及其编译系统简介
15.1.1 并行计算相关技术简介
15.1.2 并行编译系统的分类及结构
15.2 并行程序设计模型
15.2.1 并行体系结构分类及并行程序设计
15.2.2 并行程序设计模型
15.3 并行编译系统的构造
15.3.1 并行编译系统的构造简介
15.3.2 程序分析
15.3.3 程序优化
15.3.4 并行代码生成
15.4 自动并行化技术目前研究现状
习题 15
参考文献
展开
前 言
《编译原理简明教程》第1版出版于2002年,重印5次,距今已有9年时间,在这9年里,不仅编译技术有了新的发展,而且,计算机专业人员的水平也有了显著提高,因此在第2版中,我们对内容做了部分调整、增删和修改。本书第2版系普通高等教育“十二五”规划计算机教材,作为再版教材,继承了第一版理论和实践并重、文字简洁易懂等优点,并且为了适应计算机技术迅猛发展的需要,在第2版中我们增加了面向对象语言的编译技术、并行编译技术以及编译程序自动生成工具等相关内容,并将第一版中用Pascal语言编写的部分程序改为C语言程序。
“编译原理”课程是计算机科学与技术专业一门重要的专业基础课,在计算机科学中占有重要的地位。“编译原理”课程蕴涵着计算机学科中解决抽象问题的思路和方法,对计算机专业人员从事软件开发起着潜移默化的作用,就像“高等数学”课程影响每一个理工科学生一生的工作和学习一样,学好“编译原理”课程也会让计算机专业的学生“享用一辈子”。
全书共15章,第1章对编译过程、编译程序的结构、编译程序的开发进行了概要说明;第2、3章介绍了形式语言与自动机理论,为学习后续各章奠定了理论基础;第4章讨论了词法分析程序的设计原理;第5、6章详细阐述了自顶向下和自底向上的各种语法分析方法;第7—12章分别讨论了语义分析及中间代码生成、代码优化、目标代码生成、符号表、目标程序运行时的存储组织与分配等内容;第13章介绍了编译程序的自动生成工具;第14、15章分别介绍了面向对象语言的编译技术以及并行编译技术。
在内容的组织上,本书将编译的基本理论和具体的实现技术有机地结合起来,清楚地阐述相关的概念和原理,并利用C语言给出部分实现程序;同时,对编译程序自动生成工具的功能和使用方法做了详细的介绍。
本书第1、2章由段富编写,第3、6、8、10章由冯秀芳编写,第4、5、7、12章由崔冬华编写,第9章由郝晓燕编写,第11、14章由王会青编写,第13、15章由李爱萍编写。本书是在第1版的基础上修订而成,在修订过程中原合作者范辉给予了大力支持,计算机专业的研究生在录入以及校对中做了大量的工作,在此谨向他们表示诚挚的感谢。
由于编者水平有限,书中难免存在一些缺点和错误,恳请广大读者批评指正。编者Email:feng_xf2008@126.com。
编者
第 1 版序言
这套教材是面向21 世纪计算机学科系列教材。为什么要组织这套教材?根据什么编写这套教材?这些都是在这篇序言中要回答的问题。
计算机学科是一个飞速发展的学科,尤其是近千年来,计算机向高度集成化、网络化和多媒体化发展的速度一日千里。但是,从另一个方面来看,目前高等学校的计算机教育,特别是教材建设,远远落后于理实的需要。现在的教材主要是根据《教学计划1993》的要求组织编写的。这个教学计划,在制定过程中主要参照了美国IEEE 和ACM的《教学计划1991》。
10 年来,计算机学科已有了长足发展,这就要求高等学校计算机教育必须跟上形势发展的需要,在课程设置和教材建设上做出相应调整,以适应面向21 世纪计算机教育的要求。这是组织这套教材的初衷。
为了组织好这套教材,全国高等学校计算机教育研究会课程与教材建设委员会在天津召开了“全国高等学校计算机学科课程与教材建设研讨会”。在北京召并了。“教材编写大纲研讨会”。在这两次会议上,代表们深人地研讨了全国高校计算机专业教学指导委员会和中国计算机学会教育委员会制定的《计算机学科教学计划2000》以及美国IEEE 和ACM 的《计算机学科教学计划2001》,这是这套教材参照的主要依据。
IEEE 和ACM 的《计算机学科教学计划2001》是在总结了从《计算机学科教学计划1991》到现在,计算机学科十年来发展的主要成果的基础上诞生的。它认为面向21 世纪计算机学科应包括14 个主科目,其中12 个主科目为核心主科,它们是:算法与分析(AL)、体系结构(AR)、离散结构(DS)、计算科学(CN)、图形学、可视化、多媒体(GR)、网络计算(NC)、人机交互(HC)、信息管理(IM)、智能系统(IS)、操作系统(OS)、程序设计基础(PF)、程序设计语言(PL)、软件工程(SE)、社会、道德、法律和专业问题(SP)。其中除CN 和GR 为非核心主科目外,其他l2 项均为核心主科目。
将 2001 教学计划与1991 教学计划比较可看出:
(1) 在 1991 年计划中,离散结构只作为数学基础提出,而在2001 计划中,则作为核心主科目提出,显然,提高了它在计算机学科中的地位。
(2) 在 1991 计划中,未提及网络计算,而在2001 计划中,则作为核心主科目提出,以适应网络技术飞速发展的需求。
(3) 图形学、可视化与多媒体也是为适应发展要求新增加的内容。
除此之外,2001 计划在下述5 个方而做调整:
将程序设计语言引论调整为程序设计基础,将人一机通信调整为人机交互,将人工智能与机器人学调整为智能系统,将数据库与信息检索调整为信息管理,将数值与符号计算调整为计算科学。
显然,这些变化使2001 计划更具有科学性,也更好地适应了学科发展的需要。
在组织这套教材的过程巾,充分考虑了这些变化和调整,在软件和硬件的课程体系、界面划分方面均做了相应的调整,使整套教材更具有科学性和实用性。
另外,还要说明一点,教材建设既要满足必修课的要求,又要满足限选课和仟选课的要求。
因此,教材应按系列组织,反映整个计算机学科的要求,采用大拼盘结构,以适应各校不同的具体教学计划,使学校可根据自己的需求进行选择。
这套教材包括:《微机应用基础》、《离散数学》、《电路与电子技术》、《电路与电子技术习题与实验指南》、《数字逻辑与数字系统》、《计算机组成原理》、《微机接口技术》、《计算机体系结构》、《计算机网络》、《计算机网络实验教程》、《通信愿理》、《计算机网络管理》、《网络信息系统集成》、《多媒体技术》、《计算机图形学》、《计算机维护技术》、《数据结构》、《计算机算法设计与分析》、《计算机数值
分析》、《汇编语言程序设计》、《Pascal 语言程序》、《VB 程序设计》、《c 语言程序设计》、《C++语言程序设计》、《Java语言程序设计》、《操作系统原理》、《UNIX操作系统原理与应用》、《Linux操作系统》、《软件工程》、《数据库系统原理》、《编译原理》《编译方法》、《人工智能》、《计算机信息安全》、《计算机图像处理》、《人机交互》、《计算机伦理学》。对于IEEE 和ACM 的《计算机学科教学计划2001》中提出的14 个主科目,这套系列教材均涵盖,能够满足不同层次院校、不同教学计划的要辩。
这套系列教材由全国高等学校计算机教育研究会课程与教材建设委员会主任李大友教授精心策划和组织。编者均为具有丰富教学实践经验的专家和教授。所缔教材体系结构严谨、层次清晰、概念准确、论理充分、理论联系实际、深入浅出、通俗易懂。
教材组织过程中,得到了了哈尔滨工业大学蒋宗礼教授,西安交通大学董渭清副教授,武汉大学张焕国教授,吉林大学张长海教授,福卅大学王晓东教授,太原理工大学余雪丽教授等的大力支持和帮助,在此一并表示衷心感谢。
李大友
2000 年6 月
展开