第一图书网

编译程序设计艺术理论与实践

Thomas Pittman,James Peters 机械工业出版社
出版时间:

2010-1  

出版社:

机械工业出版社  

作者:

Thomas Pittman,James Peters  

页数:

341  

Tag标签:

无  

前言

  实用且复杂的现代信息系统并不是从累积的偶然事件中发展起来的。编译程序作为一个实用的信息系统,只有经过精心设计,才能以简单的措辞理解其复杂性。不仅未经设计的编译程序会有功能缺陷,编译程序理论本身还依赖于它与两种理论之间的一种微妙关系,其中一种理论是源自人类自然语言的语言学原理,另一种理论是将计算机看作有穷状态自动机。理解并利用这一关系需在文法理论的基本原理方面有扎实的根基,并熟练掌握其机械化实现过程。因而编译程序设计的教学亦涉及一个复杂的信息系统,需精心设计才能以连贯、合理的次序展示相关概念,从而让学生体会到编译程序设计的内容既是相关的,也是可管理的。  本书并非一本试图以所有可能的方法去构造所有可能的编译程序的百科全书,而是依次介绍编译程序设计中的最基本问题;其内容的深度足以让勤奋的学生有能力通过手工方式或使用编译程序生成工具(亦或两种方式之结合),构造实用且高效的编译程序。更重要的是,学生将明白这些工具是如何工作的,以及为什么必须以某种方式书写文法方可取得预期的结果。这正是设计的原则。因此,尽管大多数现代分析程序生成工具采用自底向上分析技术,但本书深入研究有更多限制的自顶向下分析理论,然后才利用相对简短(但完整)的一章内容学习自底向上分析程序。本书每…章的目标都是先灌输对基本概念的理解,然后再将这些概念应用到实践中。  与同类教材相比,本书在四个重要方面有显著特色。第一个特色是,它坚定不移地扎根于文法,一开始就介绍文法和语言识别器之间的理论关系,然后贯穿全书将文法技术应用到编译程序设计的每一方面。第二个特色是,统一将实用的属性文法作为编译程序语义的载体,坚持这一立场自然会产生一个完全由属性文法定义的、可编译其自身的“编译程序一编译程序”,这正是本书最后一章的重点。第三个特色是,具有非常实用的特征,编译程序的设计必须以属性文法定义,而编译程序的构造则需要可执行的代码,并且每一个重要的理论原则均需通过一种真实程序设计语言的大量代码清单加以阐明,不断展示文法与机器代码之间极其自然的关系。第四个特色是,选择Modula-2作为演示代码的程序设计语言,旨在概念抽象与具体效率之间取得平衡;与C语言等更低级的语言相比,应用本书后几章所介绍的优化技术能以更低的开销更显著地提高Modula-2程序的效率。  本书可用于一学期的编译原理入门课程,重点介绍前6章或前7章。本书亦可用于整学年的学习,更好地涉猎更多的高级课题。一学期的课程学习可安排在半年或一个季度的时间内完成;经过不断优化和实际教学检验,本书循序渐进地布置学生实验项目,并在期末完成一个町工作的Itty Bitty Modula编译程序,该编译程序可在最终的实验项目中用于编译另一个分析程序,例如第6章最后概述的美化打印工具或Tiny BASIC语言解释程序。

内容概要

本书详细介绍了编译程序设计中的词法分析(扫描程序)、语法分析(分析程序)、语义分析(约束程序)、中间代码优化以及代码生成等内容。作为颇受好评的编译原理优秀入门教材,本书的最大特色是在全书贯穿了一种基于文法的指导思路:在语法分析阶段,该书遵循了一般教材采用的上下文无关文法;在语义分析阶段,采用以上下文无关文法为基础的属性文法;而在代码优化和代码生成阶段,则采用了变换属性文法。书中最后还给出变换属性文法的一种自编译实现。此外,本书还探讨了面向不同计算机体系结构的代码生成技术以及非过程式语言的编译问题。 本书适合作为高等院校计算机科学与技术、软件工程以及相关专业编译原理课程的教学参考书,同时也可供计算机语言及其处理技术爱好者参考。

书籍目录

出版者的话译者序前言第1章 编译程序理论概述 1.1 简介 1.2 语言与翻译程序 1.3 文法的作用 1.4 若干例子 1.5 编译程序的结构  1.5.1 词法分析  1.5.2 字符串表  1.5.3 语法分析  1.5.4 约束  1.5.5 符号表  1.5.6 代码生成  1.5.7 优化 符号 缩略词 关键术语 练习 复习小测验 编译程序实验项目 进一步阅读第2章 文法:乔姆斯基层次 2.1 简介 2.2 文法  2.2.1 字母表与串  2.2.2 非终结符与产生式  2.2.3 若干文法例子 2.3 乔姆斯基层次 2.4 文法及其机器  2.4.1 图灵机  2.4.2 线性有界自动机  2.4.3 下推自动机  2.4.4 删除空产生式  2.4.5 比较上下文无关文法和上下文敏感文法  2.4.6 有穷状态自动机 2.5 空串与空语言 2.6 规范推导 2.7 二义性 2.8 文法思维的艺术  2.8.1 有穷状态自动机的局限性  2.8.2 上下文无关文法的计数  2.8.3 对上下文敏感 小结 符号 缩略词 关键术语 练习 复习小测验 编译程序实验项目 进一步阅读第3章 扫描程序和正则语言 3.1 词法分析简介 3.2 正则表达式  3.2.1 正则表达式代数  3.2.2 正则表达式的形式化特性 3.3 文法与正则表达式的转换 3.4 有穷状态自动机 3.5 不确定的有穷状态自动机 3.6 将文法转换为自动机 3.7 自动机的转换  3.7.1 删除空环路  3.7.2 删除空变迁  3.7.3 自动机的确定化  3.7.4 自动机的约简 ……第4章 分析程序和上下文无关语言第5章 语义分析与属性文法第6章 语法制导代码生成第7章 自底向上分析程序的自动化设计第8章 变换属性文法第9章 代码生成与优化第10章 非过程式语言附录A Itty Bitty Modula语法图附录B TAG编译程序的TAG附录C Itty Bitty线机器的指令集附录D 四种计算机的代码生成表

章节摘录

  编译程序是一个扮演着翻译人员角色的计算机程序,它读入某一计算机语言的语句,如果这些语句在该语言中是有意义的,则将它们翻译为含义相同的另一计算机语言的语句。有一些规则定义了每一种语言中什么是有意义的,编译程序运用这些规则确定其输入是否有意义,并保证其输出是有意义的。使用计算机语言编写的一系列语句组成一个程序;编译程序将一种计算机语言(称为源语言)的程序翻译为另一种计算机语言(称为目标语言)的程序(即语句序列)。  实际上存在多种计算机语言以及计算机语言的翻译程序。最简单的翻译程序是读入一种用简单计算机语言书写的单词,然后将这些单词直接翻译为计算机指令代码中的数字。这种翻译程序称为汇编程序,其源语言称为汇编语言。这一命名缘于大多数机器指令由几个部分组成,汇编语言采用不同的单词或数字表示每一部分,汇编程序则将这些部分组装成一个数值代码。汇编程序充其量不过是一个表查找例程,在表中查找源语言中每一单词对应的数字表示,并将查找结果输出,作为目标语言程序的组成部分。汇编语言通常使得程序员可准确、直接地访问计算机硬件的每~功能;然而与大多数其他计算机语言相比,使用汇编语言编写正确的程序是相当困难的。  “编译程序”这一术语一般留给更复杂的语言使用,其中源语言单词和目标语言之间不存在简洁而直接的对应关系。大多数编译程序的目标语言通常也是机器语言,这与汇编程序的目标语言相同;计算机语言翻译程序的目的固然是简化创建机器语言程序的过程,但许多早期的编译程序、甚至一些现代的编译程序都先编译为汇编语言,然后借助于汇编程序完成汇编语言到机器语言的翻译。然而,编译程序的源程序通常是所谓的高级语言(简称HLL),高级语言的特点是更接近于问题求解的表示法,而不是机器语言。例如,对于商业应用而言,COBOL(COmmon Business Oriented Language)语言采用会计人员和中层管理人员易于理解的术语;而科学计算问题往往表述为公式,FORTRAN(FORmula TRANslator)语言被认为更适合表达这些公式。现在一些程序员更喜欢一种语言既有高级语言中更抽象的结构,又带有汇编程序支持的低层控制,为此他们使用C语言(得名于它作为早期B语言的下一代语言)。程序设计方法学的最新进展提倡模块化软件设计,Modula-2语言非常强调这一特性。  解释程序在某些方面类似于翻译程序,它也读入一个高级语言的程序,但立即进行翻译,就好像翻译人员的口译一样立即可听到和理解。编译程序将一个计算机程序翻译为稍后再执行的机器代码,而解释程序则边读入、边执行程序。从某种意义上讲,解释程序从来没有真正地完成翻译过程,就好像前述例子中的翻译人员,当他听到“Peter,hit the ball!”的指示后,并不回应“Pierre,frappa la balle!”,而是径自走过去击球。由于解释程序不必关注目标语言,它可以比编译程序更快地处理一行输入程序。解释程序必须反复读入其输入程序以计算结果,但编译程序仅将输入程序翻译一次。编译程序首次运行计算机程序并得到结果要花费更长时间,但后续的运行则远快于解释程序,因为此时不再需要额外的翻译时间。  本书的重点放在编译程序的设计上,但某些练习也包含了解释程序。


编辑推荐

  ●坚定不移地扎根于文法,一开始就介绍文法和语言识别器之间的理论关系,然后贯穿全书将文法技术应用到编译程序设计的每一方面。  ●统一将实用的属性文法作为编译程序语义的载体,坚持这一立场自然会产生一个完全由属性文法定义的、可编译其自身的“编译程序一编译程序”。  ●具有非常实用豹特征,编译程序的“设计”必须以属性文法定义,而编译程序的“构造”则需要可执行的代码,并且每一个重要的理论原则均需通过一种真实程序设计语言的大量代码清单加以阐明,不断展示文法与机器代码之间极其自然的关系。  ●选择Modula-2作为演示代码的程序设计语言.旨在概念抽象与具体效率之间取得平衡。

图书封面

图书标签Tags

广告

下载页面


编译程序设计艺术理论与实践 PDF格式下载



与以前见的编译理论的书风格不太一样,给人耳目一新的感觉。


相关图书