编译原理(第三版) - 普通高等教育“十五”国家级重点教材 - 中国高校教材图书网
|
书名: |
编译原理(第三版)
普通高等教育“十五”国家级重点教材
|
| ISBN: | 978-7-5612-1870-9 |
责任编辑: | |
| 作者: |
蒋立源
相关图书
|
装订: | 平装 |
| 印次: | 3-7 |
开本: | 16开 |
| 定价: |
¥39.00
折扣价:¥35.10
折扣:0.90
节省了3.9元
|
字数: |
|
| 出版社: |
西北工业大学出版社 |
页数: |
|
| 出版日期: |
2012-02-09 |
每包册数: |
|
| 国家规划教材: |
|
省部级规划教材: |
|
| 入选重点出版项目: |
|
获奖信息: |
|
|
|
| 内容简介: |
本书第3版系普通高等教育“十五”国家级重点教材,旨在系统地介绍编译系统的结构、工作流程以及编译程序的设计原理和实现技术。全书共11章,内容包括语言及文法的基本知识、词法分析、语法分析、语义分析及中间代码生成、符号表组织、运行时的存储组织与分配、代码优化、目标代码生成以及面向对象语言的编译技术等。在内容的组织上,本书将编译的基本理论和具体的实现技术有机地结合起来,既准确清楚地阐述相关的概念和原理,又给出典型的实现程序;同时,对目前颇为流行且使用效果良好的分析器自动生成工具(如LEX,LLama,YACC,OCCS及GCC等)的功能和使用方法也作了详细的介绍。本书力求反映编译技术方面的最新成果。书中所列的分析算法、驱动程序及语义动作等,全部用C语言描述,各章之后附有大量的习题和上机实习题目。本书文字简洁易懂,内容循序渐进、深入浅出,便于自学。 本书可作为大学计算机类本科专业的教材,也可作为计算机软件科技人员的参考书。
|
| 作者简介: |
|
|
| 章节目录: |
第1章绪论1
1.1编译过程概述3
1.2编译程序的逻辑结构4
1.2.1词法分析程序5
1.2.2语法分析程序6
1.2.3语义分析程序6
1.2.4中间代码生成7
1.2.5代码优化程序7
1.2.6目标代码生成程序8
1.2.7错误检查和处理程序9
1.2.8信息表管理程序10
1.3编译程序的组织11
习题12
第2章前后文无关文法和语言14
2.1文法及语言的表示14
2.2文法和语言的定义15
2.2.1基本概念和术语16
2.2.2文法和语言的形式定义17
2.3句型的分析23
2.3.1规范推导和规范归约23
2.3.2语法树和二义性25
2.3.3短语和句柄29
2.4文法的化简和改造31
2.4.1无用符号和无用产生式的删除31
2.4.2ε产生式的消除33
2.4.3单产生式的消除35
2.5文法和语言的Chomsky分类36
习题38
第3章词法分析及词法分析程序42
3.1设计扫描器时应考虑的几个问题42
3.1.1词法分析阶段的必要性42
3.1.2单词符号的内部表示43
3.1.3识别标识符的若干约定和策略44
3.1.4源程序的输入及预处理46
3.2正规文法和状态转换图49
3.2.1由正规文法构造状态转换图49
3.2.2状态转换图的一种实现——状态矩阵法53
3.3有限自动机59
3.3.1确定的有限自动机59
3.3.2非确定的有限自动机60
3.3.3NFA与DFA的等价性62
3.3.4具有ε动作的FA64
3.3.5具有ε动作的NFA的确定化——子集法66
3.3.6DFA状态数的最小化69
3.4正规表达式与正规集71
3.4.1正规表达式与正规集的定义72
3.4.2由正规文法构造相应的正规式73
3.4.3由正规式构造FA——Thompson法76
3.5词法分析程序的实现78
3.5.1词法分析程序的编写79
3.5.2词法分析程序的自动生成82
习题98
上机实习题104
第4章语法分析和语法分析程序106
4.1自顶向下的语法分析107
4.1.1消除文法的左递归108
4.1.2回溯的消除及LL(1)文法111
4.1.3递归下降分析法113
4.1.4预测分析法119
4.1.5某些非LL(1)文法的改造124
4.2自底向上的语法分析126
4.2.1简单优先分析法127
4.2.2算符优先分析法133
4.2.3优先函数138
4.2.4LR分析法144
习题172
上机实习题178
第5章语法制导翻译及中间代码生成181
5.1引言181
5.2属性文法与属性翻译文法183
5.2.1语义属性与属性文法184
5.2.2属性翻译文法187
5.3常见中间语言概述192
5.3.1逆波兰表示192
5.3.2四元式和三元式194
5.3.3其它表示法197
5.4简单算术表达式和赋值语句的翻译198
5.5布尔表达式的翻译200
5.6程序流程控制语句的翻译205
5.6.1常见控制结构的翻译205
5.6.2FOR循环语句的翻译211
5.6.3语句标号及GOTO语句的翻译214
5.6.4情况语句的翻译217
5.7含数组元素的算术表达式及赋值语句的翻译219
5.7.1下标变量地址的计算220
5.7.2含有下标变量的赋值语句的翻译222
5.8过程说明和过程调用的翻译225
5.8.1过程说明的翻译225
5.8.2实参和形参间的信息传递226
5.8.3过程语句的翻译228
5.8.4关于形实结合的进一步讨论230
5.9说明语句的翻译231
5.9.1类型说明(变量及数组定义)语句的翻译231
5.9.2数据类型定义语句的翻译234
5.10语法分析程序的自动生成工具237
5.10.1LALR(1)分析器的自动生成工具——YACC和OCCS237
5.10.2LL(1)语法分析程序自动生成工具LLama简介248
5.10.3LLGen简介249
5.10.4GCC概述251
习题253
上机实习题255
第6章符号表257
6.1符号表的组织257
6.2分程序结构语言符号表的建立261
6.3非分程序结构语言符号表的建立266
习题268
第7章运行时的存储组织与分配270
7.1存储组织271
7.1.1运行时内存的划分271
7.1.2活动记录271
7.2运行时的分配策略272
7.2.1静态分配273
7.2.2栈式分配276
7.2.3堆式分配278
习题281
第8章代码优化284
8.1语法制导翻译阶段的优化284
8.2线性窥孔优化285
8.2.1强度削弱286
8.2.2常数合并和常数传播287
8.2.3无用变量与无用代码的删除288
8.2.4窥孔优化实例291
8.3基于结构信息的优化293
8.3.1基本块及其优化294
8.3.2数据流分析方法300
8.3.3循环优化310
习题326
上机实习题331
第9章目标代码生成332
9.1目标代码的形式332
9.2一种假想的计算机模型334
9.3一种代码生成程序的雏型337
9.3.1待用信息337
9.3.2寄存器描述符与地址描述符338
9.3.3生成目标代码的算法339
9.4DAG的代码生成342
9.5全局寄存器分配344
习题348
上机实习题349
第10章查错与改错350
10.1语法错误的校正351
10.1.1单词错误的校正351
10.1.2自顶向下分析中的错误校正352
10.1.3自底向上分析中的错误校正355
10.2语义错误的校正357
10.2.1遏止株连信息358
10.2.2遏止重复信息358
习题359
第11章面向对象语言的编译技术360
11.1引言360
11.1.1面向对象程序设计语言361
11.1.2面向对象语言编译器的一些特点361
11.2类和对象的基本特征362
11.3类的基本定义366
11.3.1基本类声明的语法定义366
11.3.2基本类声明的抽象语法树表示367
11.3.3基本类声明的处理369
11.4OOPL中重载和继承的处理377
11.4.1面向对象程序设计语言中的重载和继承377
11.4.2文法的扩展378
11.4.3重载的处理378
11.4.4继承的处理382
习题388
参考文献389
|
| 精彩片段: |
编 译 原 理第3版前言
本书第2版(普通高等教育“九五”国家级重点教材)自1999年9月出版以来,已陆续重印过5次。在此期间,我们曾对原书进行过多次勘校,对所发现的舛误一一进行了订正,并对书中一些定义、定理的表述方式以及某些章节的词句、符号和程序进行了修改,以便于读者学习。
近来,为了准备普通高等教育“十五”国家级重点教材的书稿,我们又对本书进行了一次较全面的修订,其中较重大的修改有下列几点:
1.考虑到构造编译程序簇(Compiler Collection)的技术已经广泛在国内外成功应用,因此在本书的一些章节中,我们对GNU CC的结构、工作流程以及相关知识进行了简要的介绍,以扩大学生的知识面。
2.由于面向对象的程序设计语言已经成为国际上的主流编程语言,故作为讲述“语言处理”知识的编译原理教材,对具有此种特征的语言的编译技术也应有所反映。几年前我们就曾有意于此,但由于参考资料收集不易,且对内容的组织也尚未考虑成熟,故只得暂付阙如。近两年来,我们又对此课题进行了较深入的学习、研究,在此基础上由林奕博士对相关内容进行了整理、组织,遂写成本书第11章——面向对象语言的编译技术。由于我们的视野和学术水平有限,上述工作恐不能完全满足教学工作需要,尚祈读者批评指教。
3.对“抽象语法树”和“寄存器转换语言”的知识作了概括的介绍,因为它们在构造编译器开发工具中有重要的作用。
4.由于“优先分析法”目前在设计编译器中的重要性已相对降低,因此,为突出重点和压缩篇幅,我们将有关构造优先矩阵的繁复算法予以删节。
此外,其他小的修改还有多处,不再一一列举。
本书第3版由蒋立源和康慕宁担任主编。第1~4章和第6~10章由蒋立源编写(其中,8.1节和8.2节由吴健编写);第5章的5.1~5.9节由康慕宁编写,5.10节由张延园编写;第11章由林奕编写;薛贺负责习题和上机实习题的选编;康慕宁、邓正宏和郑玉山负责本书电子版的创意、改编和制作。最后由蒋立源对全书进行统稿。
在本书第3版即将付梓之际,编者谨向教育部计算机科学与技术教学指导委员会副主任、西安交通大学冯博琴教授致以深切的谢意,他不仅一直关心和支持我们的工作,还担任本书1~3版的主审,对各版的书稿均进行过仔细的审阅,提出了许多宝贵、中肯的意见。在本书立项、编写、出版和报奖的过程中,我们还得到中国科学院沈绪榜院士,中国工程院崔俊芝院士,西北大学郝克刚、周明全和耿国华教授,西安电子科技大学陈家正、徐甲同、龚杰民和刘坚教授,西安理工大学胡元义教授以及西北工业大学教务处、出版社和计算机学院的许多领导和教授的指导和帮助,在此一并表示衷心的谢忱。
陕西省老年书画学会常务副会长李峰山教授欣然为本书题写了书名。我们谨向李老先生表示崇高的敬意。
最后,我们还要特别向本书的许多读者表示感谢。他们不惮烦劳,对本书内容进行仔细的推敲,并将所发现的问题进行反馈,使我们能及时更正书中存在的疏漏。现公布主编之一康慕宁教授的电子邮箱地址:mnkang@nwpu.edu.cn。我们衷心期望能继续得到读者的帮助和支持。
蒋立源谨识
2004年8月于西安
编 译 原 理第1版前言
“编译原理”是计算机类专业特别是计算机软件专业的一门重要专业课。设置本课程的目的,在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过学习本课程,既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。
根据上述要求,在航空高等学校第二教学指导委员会的组织下,我们参照中国计算机教育研究会向全国推荐的《编译原理教学大纲》,并结合编者多年来讲授本课程的教学实践经验,编写了本书。
全书共分为10章,第1章对编译过程、编译程序的逻辑结构及编译程序各组成部分的主要功能进行了概括的说明。第2章介绍前后文无关文法和语言的基本知识,它为学习后续各章奠定了理论基础。第3章以正规文法、正规式和有限自动机为工具,讨论了词法分析程序的设计原理。第4章讲述了语法分析程序的设计技术,其中既介绍了传统的算符优先分析方法,也介绍了目前十分流行的递归下降分析法及LR分析法,同时还对一种行之有效的语法分析程序自动生成工具YACC的使用方法进行了简要的说明。第5章以语法制导翻译为模式,介绍了将程序设计语言常见的语法成分翻译为中间代码的方法。第6章至第10章分别讨论了符号表的构造、目标程序运行时的存储组织与分配、代码优化、目标代码生成及源程序的查错与改错等问题。各章之后均附有一定数量的习题供读者选做。
编译原理是一门理论性和实践性都比较强的课程。在本书的编写过程中,我们力图将其中的基本概念、基本原理和实现方法的思路阐述清楚,因为它们不仅是构造编译程序的依据,而且对开发其它系统软件和应用软件也是很有用的。同时,为了培养学生的实际工作能力,我们在有关的章节之后,还列出了一些上机实习题目,学生通过完成这些作业可进一步加深对课堂教学内容的理解。
本书系航空教材编审委员会1991—1992年教材选题计划所列的部委规划教材,可作为计算机类各专业编译原理课的教科书 (课堂讲授约需72~80学时,此外还应有25~30学时的上机时间),也可供有关工程技术人员参考。
本书由西北工业大学蒋立源主编,参加编写工作的还有张延园、石志强、叶军和胡滨等同志。
西安交通大学冯博琴教授对本书进行了仔细的审阅,提出了许多宝贵的意见。在本书编写过程中,我们还得到了西北工业大学出版社的许多同志以及计算机系的张遵濂、徐秋元、韩兆轩、白中英、胡正国、赵政文等教授的支持、关心和帮助,在此一并表示衷心的谢忱。
由于我们学力有限,书中定有不妥之处,恳请读者批评指正。
编者
1992年3月于西安
编 译 原 理目录目录
|
| 书 评: |
|
|
| 其 它: |
|
|
|