从本书的1986版出版到现在,编译器设计领域已经发生了很大的改变。随着程序设计语言的发展,提出了新的编译问题。计算机体系结构提供了多种多样的资源,而编译器设计者必须能够充分利用这些资源。最有意思的事情可能是,古老的代码优化技术已经在编译器之外找到了新的应用。现在,有些工具利用这些技术来寻找软件中的缺陷,以及(最重要的是)寻找现有代码中的安全漏洞。而且,很多“前端”技术———文法、正则表达式、语法分析器以及语法制导翻译器等———仍然被广泛应用。.
因此,本书先前的版本所体现的我们的价值观一直没有改变。我们知道,只有很少的读者将会去构建甚至维护一个主流程序设计语言的编译器。但是,和编译器相关的模型、理论和算法可以被应用到软件设计和开发中出现的各种各样的问题上。因此,我们会关注那些在设计一个语言处理器时常常会碰到的问题,而不考虑具体的源语言和目标机器究竟是什么。
使用本书
下面是各章的概要介绍:
第1章给出一些关于学习动机的资料,同时也将给出一些关于计算机体系结构和程序设计语言原则的背景知识。
第2章会开发一个小型的编译器,并介绍很多重要概念。这些概念将在后面的各章中深入介绍。这个编译器本身将在附录中给出。
第3章将讨论词法分析、正则表达式、有穷状态自动机和词法分析器的生成器工具。这些内容是各种文本处理的基础。
第4章将讨论主流的语法分析方法,包括自顶向下方法(递归下降法、LL技术)和自底向上方法(LR技术和它的变体)。
第5章将介绍语法制导定义和语法制导翻译的基本思想。
第6章将使用第5章中的理论,并说明如何使用这些理论为一个典型的程序设计语言生成中间代码。
第7章将讨论运行时刻环境,特别是运行时刻栈的管理和垃圾回收机制。
第8章将主要讨论目标代码生成技术。该章会讨论基本块的构造,从表达式和基本块生成代码的方法,以及寄存器分配技术。
第9章将介绍代码优化技术,包括流图、数据流分析框架以及求解这些框架的迭代算法。
哥伦比亚大学、哈佛大学、斯坦福大学已经开设了讲授本书内容的课程。哥伦比亚大学定期开设一门关于程序设计语言和翻译器的课程,使用了本书前8章的内容。该课程常年面向高年级本科生/一年级研究生讲授,这门课程的亮点是一个长达一个学期的课程实践项目。在该项目
中,学生分成小组,创建并实现一个他们自己设计的小型语言。学生创建的语言涉及多个应用领域,包括量子计算、音乐合成、计算机图形学、游戏、矩阵运算和很多其他领域。在构建他们自己的编译器时,学生们使用了很多种可以生成编译器组件的工具,比如ANTLR、Lex和Yacc;他们还使用了第2章和第5章中讨论的语法制导翻译技术。
斯坦福大学开设了一门历时一个学季的入门课程,大致涵盖了本书第1章到第8章的内容,同时还会简介本书第9章中全局代码优化的相关内容。
预备知识
学习本书的读者应该拥有一些“计算机科学的综合知识”,至少学过两门程序设计课程,以及数据结构和离散数学的课程。具备多种程序设计语言的知识对学习本书会有所帮助。..
练习
本书包含内容广泛的练习,几乎每一节都有一些练习。我们用感叹号来表示较难的练习或练习中的一部分。难度最大的练习有两个感叹号。
.万维网上的支持
在本书的主页http://dragonbook.stanford.edu)上可以找到本书已知错误的勘误表以及一些支持性资料。我们希望将我们讲授的每一门与编译器相关的课程的可用讲义(包括家庭作业、答案和练习等)都提供出来。我们也计划公布由一些重要编译器的作者撰写的关于这些编译器的描述。
致谢
本书封面由Strange Tonic Productions的S.D.Ullman设计。
Jon Bentley针对本书的初稿中的多章内容与我们进行了广泛深入的讨论。我们收到了来自下列人员的有帮助的评价和勘误:Domenico Bianculli、Peter Bosch、Marcio Buss、Marc Eaddy、Stephen Edwards、Vibhav Garg、Kim Hazelwood、Gaurav Kc、Wei Li、Mike Smith、Art Stamness、Krysta Svore、Olivier Tardieu和Jia Zeng。我们衷心感谢这些人的帮助。当然,书中还可能有错漏之处,希望得到指正和反馈。
另外,Monica希望能够向她在SUIF编译器团队的同事表示感谢,感谢他们在18年的时间里给予她的支持和帮助,他们是:Gerald Aigner、Dzintars Avots、Saman Amarasinghe、Jennifer Anderson、Michael Carbin、Gerald Cheong、Amer Diwan、Robert French、Anwar Ghuloum、Mary Hall、John Hennessy、David Heine、ShihWei Liao、Amy Lim、Benjamin Livshits、Michael Martin、Dror Maydan、Todd Mowry、Brian Murphy、Jeffrey Oplinger、Karen Pieper、Martin Rinard、Olatunji Ruwase、Constantine Sapuntzakis、Patrick Sathyanathan、Michael Smith、Steven Tjiang、Chau-Wen Tseng、Christopher Unkel、John Whaley、Robert Wilson、Christopher Wilson和Michael Wolf。...
A.V.A.,Chatham NJ
M.S.L.,Menlo Park CA
R.S.,Far Hills NJ
J.D.U.,Stanford CA
2006年6月