译者序

本书全面讲述了现代编译器的结构、编译算法和实现方法,是Andrew W.Apple的“虎书”———ModernCompilerImplementation——— “红、蓝、绿”三序列之一。这三本书的内容基本相同,但是使用不同的语言来实现书中给出的一个编译器。本书使用的是更适合广大读者的C 语言,而另外两本书分别采用ML 和Java语言。

国外关于编译技术有三本比较著名的书,分别被誉为“龙书”“鲸书”和“虎书”。“虎书”即本书,已经被国外许多著名大学选作编译原理课程的教材。编译器的设计与实现是一种实践性很强的工程。作为讲述编译器实现方法的编译原理课程,既需要讲述理论和原理,也离不开具体的实践。本书的章节按照编译器处理过程的各个阶段依次组织,并精心设计了一个“学生项目编译器”的框架和模块接口。每一章结尾给出了与该编译器一个模块对应的编译器项目实现的习题,使得学生在掌握了编译原理和方法的同时,能够理论联系实际地亲自动手体验具体的实现过程,并逐步实现一个编译器。它弥补了目前一些编译原理教科书在实践方面的不足。这是本书的特点之一。

本书的另一个特点是增加了一些其他编译原理教科书没有涉及的内容。前端增加了面向对象的程序设计语言、函数式程序设计语言等现代语言的编译实现方法,后端增加了针对现代计算机体系结构特征的一些比较成熟的优化方法。这部分内容展现了现代商业编译器需解决的一些关键问题,开拓了学生的视野,为学生未来进行更深入的研究奠定了基础。

在翻译过程中,我们力图忠实于原文,使译文通顺流畅,并保持专用术语的译法与惯用的一致。对于那些没有明确译法的术语,则根据原义拟定,并给出了英文以利读者对照。

本书第1~4章由沈志宇翻译,第5~14章以及前言和附录由赵克佳翻译,第15~21章由黄春翻译。全书经过三人的反复校对,最后由赵克佳定稿。在本书的翻译中,我们深感阅读英文专业书籍和较好地翻译出来是两回事。翻译好一本专业类图书除了要有相应的英文和专业功底外,还要有比较好的中文功底。我们自感在这三方面都有所欠缺,难免会留有遗憾。衷心欢迎读者批评指正,因为读者的批评指正对我们是极好的帮助。

目录

  • 译者序
  • 前言
  • 第一部分 编译基本原理
  • 第1章 绪论
  • 第2章 词法分析
  • 第3章 语法分析 
  • 第4章 抽象语法
  • 第5章 语义分析
  • 第6章 活动记录
  • 第7章 翻译成中间代码
  • 第8章 基本块和轨迹
  • 第9章 指令选择
  • 第10章 活跃分析
  • 第11章 寄存器分配
  • 第12章 整合为一体
  • 第13章 垃圾收集
  • 第14章 面向对象的语言
  • 第15章 函数式程序设计语言
  • 第16章 多态类型
  • 第17章 数据流分析
  • 第18章 循环优化
  • 第19章 静态单赋值形式
  • 第20章 流水和调度
  • 第21章 存储层次