现代编译原理-C语言描述
基本信息
推荐阅读
内容简介回到顶部↑
本书全面讲述了现代编译器的各个组成部分,包括词法分析、语法分析、抽象语法、语义检查、中间代码表示、指令选择、数据流分析、寄存器分配以及运行时系统等。全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数语言、垃圾收集、循环优化、ssa(静态单赋值)形式、循环调度、存储结构优化等,适合于后续课程或研究生教学。书中专门为学生提供了一个用c语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。.
全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数式语言。垃圾收集,循环优化、ssa(静态单赋值)形式。循环调度、存储结构优化等,适合于专题选讲,后续课程或研究生教学。..
本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(alfred aho等编著)齐名,而在先进性和新颖性方面则更胜后者一筹。国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院,加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。...
全书分成两部分,第一部分是编译的基础知识,适用于第一门编译原理课程(一个学期);第二部分是高级主题,包括面向对象语言和函数式语言。垃圾收集,循环优化、ssa(静态单赋值)形式。循环调度、存储结构优化等,适合于专题选讲,后续课程或研究生教学。..
本书在国外享有“虎书”的称号,与有“龙书”之称的《编译原理》(alfred aho等编著)齐名,而在先进性和新颖性方面则更胜后者一筹。国际上众多名校均采用本书作为编译原理课程的教材,包括美国麻省理工学院,加州大学伯克利分校、普林斯顿大学和英国剑桥大学等。...
目录回到顶部↑
第一部分 编译基本原理.
第1章 绪论 1
1.1 模块与接口 1
1.2 工具和软件 3
1.3 树语言的数据结构 3
程序设计:直线式程序解释器 7
推荐阅读 9
习题 9
第2章 词法分析 10
2.1 词法单词 10
2.2 正则表达式 11
2.3 有限自动机 13
2.4 非确定有限自动机 15
2.4.1 将正则表达式转换为nfa 16
2.4.2 将nfa转换为dfa 18
2.5 lex:词法分析器的生成器 20
程序设计:词法分析 22
推荐阅读 23
习题 23
第3章 语法分析 27
第1章 绪论 1
1.1 模块与接口 1
1.2 工具和软件 3
1.3 树语言的数据结构 3
程序设计:直线式程序解释器 7
推荐阅读 9
习题 9
第2章 词法分析 10
2.1 词法单词 10
2.2 正则表达式 11
2.3 有限自动机 13
2.4 非确定有限自动机 15
2.4.1 将正则表达式转换为nfa 16
2.4.2 将nfa转换为dfa 18
2.5 lex:词法分析器的生成器 20
程序设计:词法分析 22
推荐阅读 23
习题 23
第3章 语法分析 27
译者序回到顶部↑
本书全面讲述了现代编译器的结构、编译算法和实现方法,是Andrew W.Apple的“虎书”——Modern Compiler Implementation——“红、蓝、绿”三序列之一。这三本书的内容基本相同,但是使用不同的语言来实现书中给出的一个编译器。本书使用的是更适合广大读者的c语言,而另外两本书分别采用ML语言和Java语言。.
国外关于编译技术有三本比较著名的书,分别被誉为“龙书”、“鲸书”和“虎书”。“虎书”即是本书,它已经被国外许多著名大学选作编译原理课程的教材。编译器的设计与实现是一种实践性很强的工程。作为讲述编译器实现方法的编译原理课程,既需要讲述理论和原理,也离不开具体的实践。本书的章节按照编译器处理过程的各个阶段依次组织,并精心设计了一个“学生项目编译器”的框架和模块接口。每一章结尾给出了与该编译器一个模块对应的编译器项目实现的习题,使得学生在掌握了编译原理和方法的同时,能够理论联系实际地亲自动手,体验具体的实现过程,并逐步实现一个编译器。它弥补了目前一些编译原理教科书在实践方面的不足。这是本书的特点之一。..
本书的另一个特点是增加了一些其他编译原理教科书没有涉及的内容。前端增加了面向对象的程序设计语言、函数式程序设计语言等现代语言的编译实现方法,后端增加了针对现代计算机体系结构特征的一些比较成熟的优化方法。这部分内容展现了现代商业编译器需解决的一些关键问题,开拓了学生的视野,为学生未来进行更深入的研究奠定了基础。
在翻译过程中,我们力图忠实于原文,使译文通顺流畅,并保持专用术语的译法与惯用的一致。对于那些没有明确译法的术语,则根据原义拟定,并给出了英文以利读者对照。
本书第1-4章由沈志宇翻译,第5-14章以及前言和附录由赵克佳翻译,第15-21章由黄春翻译。全书经过三人的反复校对,最后由赵克佳定稿。在本书的翻译中,我们深感阅读英文专业书籍和较好地翻译出来是两回事。翻译好一本专业类书籍除了要有相应的英文和专业功底外,还要有比较好的中文功底。我们自感在这三方面都有所欠缺,难免会留有遗憾。衷心欢迎读者批评指正,因为读者的批评指正对我们是极好的帮助。...
译 者
2006年1月11日于国防科大
国外关于编译技术有三本比较著名的书,分别被誉为“龙书”、“鲸书”和“虎书”。“虎书”即是本书,它已经被国外许多著名大学选作编译原理课程的教材。编译器的设计与实现是一种实践性很强的工程。作为讲述编译器实现方法的编译原理课程,既需要讲述理论和原理,也离不开具体的实践。本书的章节按照编译器处理过程的各个阶段依次组织,并精心设计了一个“学生项目编译器”的框架和模块接口。每一章结尾给出了与该编译器一个模块对应的编译器项目实现的习题,使得学生在掌握了编译原理和方法的同时,能够理论联系实际地亲自动手,体验具体的实现过程,并逐步实现一个编译器。它弥补了目前一些编译原理教科书在实践方面的不足。这是本书的特点之一。..
本书的另一个特点是增加了一些其他编译原理教科书没有涉及的内容。前端增加了面向对象的程序设计语言、函数式程序设计语言等现代语言的编译实现方法,后端增加了针对现代计算机体系结构特征的一些比较成熟的优化方法。这部分内容展现了现代商业编译器需解决的一些关键问题,开拓了学生的视野,为学生未来进行更深入的研究奠定了基础。
在翻译过程中,我们力图忠实于原文,使译文通顺流畅,并保持专用术语的译法与惯用的一致。对于那些没有明确译法的术语,则根据原义拟定,并给出了英文以利读者对照。
本书第1-4章由沈志宇翻译,第5-14章以及前言和附录由赵克佳翻译,第15-21章由黄春翻译。全书经过三人的反复校对,最后由赵克佳定稿。在本书的翻译中,我们深感阅读英文专业书籍和较好地翻译出来是两回事。翻译好一本专业类书籍除了要有相应的英文和专业功底外,还要有比较好的中文功底。我们自感在这三方面都有所欠缺,难免会留有遗憾。衷心欢迎读者批评指正,因为读者的批评指正对我们是极好的帮助。...
译 者
2006年1月11日于国防科大
前言回到顶部↑
近十余年来,编译器的构建方法出现了一些新的变化。一些新的程序设计语言已经得到应用,例如,具有动态方法的面向对象语言、具有嵌套作用域和一阶函数闭包(first-class function closure)的函数式语言等,这些语言中有许多都需要垃圾收集技术的支持。另一方面,新的计算机都有较大的寄存器集合,且存储器访问成为了影响性能的主要因素,这类机器在具有指令调度能力,并能对指令和数据高速缓存(cache)进行局部性优化的编译器辅助下,常常能运行得更快。.
本书可作为一到两个学期编译课程的教材。学生将看到一个编译器不同部分中隐含的理论,学习到将这些理论付诸实现时使用的程序设计技术和以模块化方式实现该编译器时使用的接口。为了清晰具体地给出这些接口和程序设计的例子,我使用C语言来编写它们。本书还有使用Java和ML语言的另外两个版本。
实现项目。我在书中概述了一个“学生项目编译器”,它相当简单,而且其安排方式也便于说明现在常用的一些重要技术。这些技术包括避免语法和语义相互纠缠的抽象语法树、独立于寄存器分配的指令选择、能使编译器前期阶段有更多灵活性的复写传播,以及防止从属于特定目标机的方法。与其他许多教材中的“学生编译器”不同,本书中采用的编译器有一个简单而完整的后端,它允许在指令选择之后进行寄存器分配。..
本书第一部分中,每一章都有一个与编译器的一个模块对应的程序设计习题。在http://www.cs.princeton.edu/~appel/modern/c中可找到对这些习题有帮助的一些软件。
习题。每一章都有一些书面习题;标有一个星号的习题有点挑战性,标有两个星号的习题较难但仍可解决,偶尔出现的、标有三个星号的习题是一些尚未找到解决方法的问题。
授课顺序。图0-1展示了各章相互之间的依赖关系。
·一学期的课程可包含第一部分的所有章节(第1-12章),同时让学生实现项目编译器(多半按项目组的方式进行)。另外,授课内容中还可以包含从第二部分中选择的一些主题。
·高级课程或研究生课程可包含第二部分的内容,以及另外一些来自最新文献的主题。第二部分中有许多章节与第一部分无关,因此,对于那些在初始课程中使用不同教材的学生而言,仍然可以给他们讲授高级课程。
·若按两个半个学期来安排教学,则前半学期可包含第1-8章,后半学期包括第9-12章和第二部分的某些章。 ...
本书可作为一到两个学期编译课程的教材。学生将看到一个编译器不同部分中隐含的理论,学习到将这些理论付诸实现时使用的程序设计技术和以模块化方式实现该编译器时使用的接口。为了清晰具体地给出这些接口和程序设计的例子,我使用C语言来编写它们。本书还有使用Java和ML语言的另外两个版本。
实现项目。我在书中概述了一个“学生项目编译器”,它相当简单,而且其安排方式也便于说明现在常用的一些重要技术。这些技术包括避免语法和语义相互纠缠的抽象语法树、独立于寄存器分配的指令选择、能使编译器前期阶段有更多灵活性的复写传播,以及防止从属于特定目标机的方法。与其他许多教材中的“学生编译器”不同,本书中采用的编译器有一个简单而完整的后端,它允许在指令选择之后进行寄存器分配。..
本书第一部分中,每一章都有一个与编译器的一个模块对应的程序设计习题。在http://www.cs.princeton.edu/~appel/modern/c中可找到对这些习题有帮助的一些软件。
习题。每一章都有一些书面习题;标有一个星号的习题有点挑战性,标有两个星号的习题较难但仍可解决,偶尔出现的、标有三个星号的习题是一些尚未找到解决方法的问题。
授课顺序。图0-1展示了各章相互之间的依赖关系。
·一学期的课程可包含第一部分的所有章节(第1-12章),同时让学生实现项目编译器(多半按项目组的方式进行)。另外,授课内容中还可以包含从第二部分中选择的一些主题。
·高级课程或研究生课程可包含第二部分的内容,以及另外一些来自最新文献的主题。第二部分中有许多章节与第一部分无关,因此,对于那些在初始课程中使用不同教材的学生而言,仍然可以给他们讲授高级课程。
·若按两个半个学期来安排教学,则前半学期可包含第1-8章,后半学期包括第9-12章和第二部分的某些章。 ...
评论交流
共有23人开贴评论 28人参与评论 21人参与打分 查看
评价等级:







发表于:2010-1-25 22:56:00
虎书。
关于龙、虎、鲸三书。我认为分别是讲“理论”、“技术”、“实现”。
就学习来说,编译是最难的计算机软件系统(操作系统、编译系统、数据库系统、网络系统、信息系统、软件工程),也是最“计算机科学”的计算机软件系统。扯远了。
这本书应该是龙、虎、鲸三本中最好学的一本。理论不深、有一套完整的而简单的实验程序。
一般人只是了解编译的内容,没必要学龙书。学龙书,是为了进军计算机科学,在大多数本科生都不认得Turing机的情况下,龙书的大多数内容对他们来说是浪费。龙书应该与语言理论配合,包括形式语言和计算机语言。为未来计算机科学的发展打基础。
鲸书,可以算是编译工程的入门,想实现现代编译器,而不仅是学知识的话,恐怕必走鲸书这条路。
虎书,占中间,适合大多数为了了解编译器知识、提高自己对计算机的理解和增进计算机思维能力而学习编译的人。作入门书最好。
当然为了考试,陈火旺的编译原理更适合中国国情。
关于龙、虎、鲸三书。我认为分别是讲“理论”、“技术”、“实现”。
就学习来说,编译是最难的计算机软件系统(操作系统、编译系统、数据库系统、网络系统、信息系统、软件工程),也是最“计算机科学”的计算机软件系统。扯远了。
这本书应该是龙、虎、鲸三本中最好学的一本。理论不深、有一套完整的而简单的实验程序。
一般人只是了解编译的内容,没必要学龙书。学龙书,是为了进军计算机科学,在大多数本科生都不认得Turing机的情况下,龙书的大多数内容对他们来说是浪费。龙书应该与语言理论配合,包括形式语言和计算机语言。为未来计算机科学的发展打基础。
鲸书,可以算是编译工程的入门,想实现现代编译器,而不仅是学知识的话,恐怕必走鲸书这条路。
虎书,占中间,适合大多数为了了解编译器知识、提高自己对计算机的理解和增进计算机思维能力而学习编译的人。作入门书最好。
当然为了考试,陈火旺的编译原理更适合中国国情。
| 我要写评论 |
| 查看所有评论交流(共23条) |








点击看大图





加载中...

