本书介绍编译系统的一般构造原理、基本实现技术和一些自动构造工具。主要由语言基础知识、词法分析、语法分析、中间代码生成、代码优化、目标代码生成、符号表的构造和运行时存储空间的组织等部分组成。\r\n 书中在介绍编译程序构造基本原理的同时引入“PL/0语言的编译程序”结构及文本,还引入了LEX、YACC使用方法与实例。\r\n 本书是高等院校计算机科学与技术专业的本科生教材,也可作为教师、研究生蔌软件工程技术人员的参考书。\r\n
第1章 引论\r\n 1.1 什么是编译程序\r\n 1.2 编译过程和编译程序的结构\r\n 1.2.1 编译过程概述\r\n 1.2.2 编译程序的结构\r\n 1.2.3 编译阶段的组合\r\n 1.3 解释程序和一些软件工具\r\n 1.3.1 解释程序\r\n 1.3.2 处理源程序的软件工具\r\n 1.4 程序设计语言范型\r\n 练习\r\n第2章 PL/0编程程序的实现\r\n 2.1 PL/0语言描述\r\n 2.1.1 PL/0语言的语汉描述图\r\n 2.1.2 PL/0语言文法的EBNF表示\r\n 2.2 PL/0编译程序的结构\r\n 2.3 PL/0编译程序的词法分析\r\n 2.4 PL/0编译程序的语法语义分析\r\n 2.5 PL/0编译程序的目标代码结构和代码生成\r\n 2.6 PL/0编译程序的语法错误处理\r\n 2.7 PL/0编译程序的目标代码解释执行时的存储分配\r\n 练习\r\n第3章 文法和语言\r\n 3.1 文法的直观概念\r\n 3.2 符号和符号串\r\n 3.3 文法和语言的形式定义\r\n 3.4 文法的类型\r\n 3.5 上下文无关文法及其语法树\r\n 3.6 句型的分析\r\n 3.6.1 自上而下的分析方法\r\n 3.6.2 自下而上的分析方法\r\n 3.6.3 句型分析的有关问题\r\n 3.7 有关文法实用中的一些说明\r\n 3.7.1 有关文法的实用限制\r\n 3.7.2 上下文无关文法中的规则\r\n 3.8 典型例题解答\r\n 练习\r\n第4章 词法分析\r\n 4.1 词法分析程序的设计\r\n 4.1.1 词法分析程序与语法分析程序的接口方式\r\n 4.1.2 词法分析程序的输出\r\n 4.1.3 将词法分析工作分离的考虑\r\n 4.2 单词的描述工具\r\n 4.2.1 正规文法\r\n 4.2.2 正规式\r\n 4.2.3 正规文法和正规式的等性\r\n 4.3 有穷自动机\r\n 4.3.1 确定的有穷自动机(DFA)\r\n 4.3.2 不确定的有穷自动机(NFA)\r\n 4.3.3 NFA转换为等价的DFA\r\n 4.3.4 确定有穷自动机的化简\r\n 4.4 正规式和有穷自动机的等价性\r\n 4.5 正规文法和有穷自动机的等价性\r\n 4.6 词法分析程序的自动构造工具\r\n 4.7 典型例题及解答\r\n 练习\r\n第5章 自顶向下语法分析方法\r\n 5.1 确定的自顶向下分析思想\r\n 5.2 LL(1)文法的判别\r\n 5.3 某些非LL(1)文法到LL(1)文法的等价变换\r\n 5.4 不确定的自顶向下分析思想\r\n 5.5 确定的自顶向下分析方法\r\n 5.5.1 递归子程序法\r\n 5.5.2 预测分析方法\r\n 5.6 典型例题及解答\r\n 练习\r\n第6章 自底向上优先分析\r\n第7章 LR分析\r\n第8章 语法制导翻译和中间代码生成\r\n第9章 符号表\r\n第10章 目标程序运行时的存储组织\r\n第11章 代码优化\r\n第12章 代码生成\r\n第13章 编译程序的构造\r\n第14章 面向对象语言的编译\r\n第15章 编译程序的面向对象构造\r\n附录A PL、0编译程序文本\r\n A.1 Pascal版本\r\n A.2 C版本\r\n参考文献
清华大学计算机系列教材已经出版发行了近30种,包括计算机专业的基础数学、专业技术基础和专业等课程的教材,覆盖了计算机专业大学本科和研究生的主要教学内容;这是一批至今发行数量很大并赢得广大读者赞誉的书籍,是近年来出版的大学计算机教材中影响比较大的一批精品。
本系列教材的作者都是我熟悉的教授与同事,他们长期在第一线担任相关课程的教学工作,是二批很受大学生和研究生欢迎的任课教师。编写高质量的大学(研究生)计算机教材,不仅需要作者具备丰富的教学经验和科研实践,还需要对相关领域科技发展前沿的正确把握和了解。正因为本系列教材的作者们具备了这些条件,才有了这批高质量优秀教材的出版。可以说,教材是他们长期辛勤工作的结晶。本系列教材出版发行以来,从其发行的数量、读者的反映、已经获得的许多国家级与省部级的奖励以及在各个高等院校教学中所发挥的作用上,都可以看出本系列教材所产生的社会影响与效益。
计算机科技发展异常迅速、内容更新很快。作为教材,一方面要反映本领域基础性、普遍性的知识,保持内容的相对稳定性;另一方面,又需要跟踪科技的发展,及时地调整和更新内容。本系列教材都能按照自身的需要及时地做到了这一点,如《计算机组成与结构》一书十年中共出版了三版,其他如《数据结构》等也都已出版了第二版,使教材既保持了稳定性,又达到了先进性的要求。本系列教材内容丰富、体系结构严谨、概念清晰、易学易懂,符合学生的认识规律,适合于教学与自学,深受广大读者的欢迎。系列教材中多数配有丰富的习题集和实验,有的还配备多媒体电子教案,便于学生理论联系实际地学习相关课程。
随着我国进一步的开放,我们需要扩大国际交流,加强学习国外的先进经验。在大学教材建设上,我们也应该注意学习和引进国外的先进教材。但是,计算机系列教材的出版发行实践以及它所取得的效果告诉我们,在当前形势下,编写符合国情的具有自主版权的高质量教材仍具有重大意义和价值。它与前者不仅不矛盾,而且是相辅相成的。本系列教材的出版还表明,针对某个学科培养的要求,在教育部等上级部门的指导下,有计划地组织任课教师编写系列教材,还能促进对该学科科学、合理的教学体系和内容的研究。
我希望今后有更多、更好的优秀教材出版。
吕映芝,清华大学计算机系统教授,1961年毕业于清华大学数学力学系计算数学专业。主要从事程序设计语言编译原理的教学工作,程序语言结构和自动生成工具的研究工作以及程序设计语言编译原理计算机辅助教学软件的研制和开发工作。
本书介绍程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。为计算机科学和技术专业的本科生提供教材。
尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,因此本书也是从事系统软件和软件工具研究及开发者的参考书。
几年来的教学实践证明,本教材第一版的内容和架构都不错,受到广大读者的欢迎,且被一些院校选用,目前已出版20余万册。随着嵌入式系统的迅速发展和高性能体系结构的推陈出新,对支持多源语言多目标机的编译技术的研究显得尤为重要,同时,面向对象技术的兴起与广泛使用也对传统的编译技术提出了新的挑战和要求,这些发展变化应在教材中有所体现。本书在第一版的基础上,修改和添加了相应章节。首先从剖析一个简单的编译程序(PL/0)人手,对编译程序设计的基本理论,如有穷自动机、上下文无关文法等给予必要的介绍;对于广泛使用的语法分析方法和语义分析技术,如递归子程序法、算符优先分析、LR分析及语法制导翻译等进行了详细的讲解;对编译程序的结构及其各部分功能、实现方法以及整体的设计考虑等给予了描述;还介绍了编译程序的构造技术,包括可重定向编译器的开发方法;此外,讨论了面向对象语言的编译技术以及利用面向对象方法构造编译程序的基本思想。并在附录中给出了PL/o的编译程序文本(包括C和Pascal两种语言文本)。
本书的第1章、第3章、第4章、第8章、第10章和第11章由张素琴编写,第2章、第5章至第7章由吕映之编写,第9章、第14章和第15章由蒋维杜编写,第12章和第13章由戴桂兰编写。另外,感谢蔡锐提供了PL/o编译程序的C版本。
书中若有不妥之处,请读者批评指正。