![]() ![]() |
编译器构造 [美]查尔斯·N.费希尔 [美]罗恩·K.塞隆 [美]理查德·J.勒布朗 本书面向初学者,从编译器构造的角度进行分析,旨在帮助读者深入理解编译器的设计原理和方法。全书共14章,主要内容包括:词法分析和语法分析、语法制导翻译、符号表和声明处理、语义分析、虚拟机代码、运行时支持、目标代码生成等。全书内容安排紧凑合理,对编译器构造的基本知识与关键技术进行了深入浅出的讲解,并提供了详尽清晰的算法,倡导在实践中学习编译器构造的相关技术。本书不仅可作为计算机专业本科生或研究生的教材,也适合作为相关领域技术人员的参考书。 本书是一本经典的面向本科生理解编译原理和编译器构造的课程教材。本书以简洁、清晰的风格全面介绍了编译器构造的基本知识与关键技术。本书的三位原作者大学拥有30余年的编译器课程教学经验,根据他们丰富的教学经验和研究经验编写了这本教材。本书结合程序语言和编译技术的发展,以Java语言作为编译器的分析对象,并且采用面向对象的设计模式来组织编译器中的数据结构,在很大程度上降低了编译器构造的复杂程度,使初学编译器的读者能更加容易地上手实现自己的编译器。 前 言 自1988年费希尔和勒布朗合著的Crafting a Compiler出版以来,情况已经发生了很大变化。虽然教师可能还记得那本书保存在5.25英寸软盘上的附带软件,但现在的大多数学生既未曾拥有过也没有见过这样的软盘。学生在课堂上和课外所体验的编程语言发生了许多变化。1991年,这本书以两种形式出现,其中的算法用C语言或Ada语言呈现。虽然现在C语言仍然是一种流行的语言,但Ada语言已经变得鲜为人知,没有达到预期的流行程度。C 语言从C语言发展而来,加入了面向对象的特性。Java是作为一种更简单的面向对象语言开发的,因其安全性和能在Web浏览器中运行而受到欢迎。美国大学理事会指定的大学先修课程已从Pascal改为C ,而后又改为Java。 虽然发生了很多变化,但学生还在继续学习、教师也还在继续教授编译器构造这一课程。编译器和编程语言翻译领域的研究继续快步前进,这是因为编译器以适应日益多样化的体系结构和编程语言为己任。软件开发环境也依赖于编译器与各种软件工具链组件(如语法感知编辑器、性能剖析工具和调试器)的成功互动。所有的现代软件都依赖于编译器来严格检查错误并忠实地翻译程序。 随着时间的推移,一些教科书经历了相对较小的变化,可能增加了一些新的习题或示例。而本书则反映了1988年到1991年期间素材的大量实质性的修订。虽然本书的重点仍然是讲授编译器结构的基本原理,但算法和方法层面已融入最新实践: ● 已经从实际应用中消失的主题(例如,属性文法)的相关内容已被尽量压缩或完全删除。 有些教科书经过修订,增加了更多的研究生水平的素材。虽然这些内容在高级课程中可能有用,但本书的主要读者仍然是学习编译器构造的本科生。研究生课程可以使用第13章和第14章的内容,并将前面的部分作为参考材料。 伪代码和缩写 本书的使用方法 第10章介绍Java虚拟机(Java Virtual Machine,JVM),如果学生要在他们的项目中生成JVM代码,就应讲授这些内容。第11章介绍虚拟机代码生成。希望学生生成机器代码的教师可以跳过第10章和第11章,而只讲第12章和第13章。入门课程可以包括第14章开始部分有关自动程序优化的内容。 第4~6章中涉及语法分析技术的更多细节。第8章和第9章对类型检查和语义分析进行了广泛和深入的研究。第10章和第14章介绍高级概念,如静态单赋值(Static Single Assignment,SSA)形式等。第14章涉及程序分析和转换的高级主题,包括数据流框架。第13章和第14章可以作为研究生编译器课程的基础,辅以前面的章节作为参考材料。 各章概述 第1章 引言 第2章 一个简单的编译器 第3章 词法分析理论与实践 第4章 文法和语法分析 第5章 自顶向下语法分析 第6章 自底向上语法分析 第7章 语法制导翻译 第8章 符号表和声明处理 该章还介绍了处理符号声明所需的语义分析,包括类型、变量、数组、结构和枚举,同时介绍了类型检查,包括面向对象类、子类和超类。 第9章 语义分析 第10章 中间表示 第11章 虚拟机代码生成 虽然对生成机器码感兴趣的读者可能会跳过第11章,但我们建议先学习这一章,然后再尝试生成机器码级别的代码。第11章的思想很容易应用于第12章和第13章,但从VM的角度来看,它们更容易理解。 第12章 运行时支持 第13章 目标代码生成 第14章 程序优化 查尔斯·N.费希尔 (Charles N.Fischer) 美国威斯康星大学计算机科学系教授,长期为本科生和研究生讲授编译原理相关课程。研究兴趣为编译器设计与实现。 罗恩·K.塞隆 (Ron K.Cytron) 美国圣路易斯华盛顿大学计算机科学与工程系教授,研究兴趣为实时系统与程序设计语言。 理查德·J.勒布朗 (Richard J.LeBlanc,Jr.) 美国佐治亚理工学院计算机系教授,主讲编译器与解释器方面的课程。曾任ACM教育委员会委员,是SE2004教育规范委员会副主席。 王刚,南开大学计算机学院教授、博士生导师。主要讲授程序设计、算法、编译、并行计算方面的课程。研究兴趣包括计算机理论、海量信息存储、并行与分布式计算、搜索引擎等,特别是在分布式存储系统可靠性技术、云存储用户数据隐私保护、搜索引擎性能优化等方向取得了一系列重要成果。近年来在计算机领域的国际顶尖学术期刊及国际顶级学术会议发表学术论文。主持国家863项目、国家自然科学基金项目、天津市自然科学基金项目等,主持与百度公司、奇虎360公司、华为公司等合作项目。现为IEEE/ACM/中国计算机学会会员、中国计算机学会信息存储专委会委员、中国计算机学会理论计算机专委会委员。 目 录
你还可能感兴趣
我要评论
|