本书深入讨论了编译器设计的重要主题,包括词法分析、语法分析、语法制导分析、类型检查、运行环境、中间代码生成、代码生成、代码优化等,并在最后两章中讨论了实现编译器的一些编程问题和几个编译器实例,每章都提供了大量的练习和参考文献。本书从介绍编译的原理性概念开始,然后通过构建一个简单的一遍编译器来逐一解释这些概念。
\r\n 本书是编译原理课程的经典教材,作者曾多次使用本书的内容在贝尔实验室、哥伦比亚大学、普林斯顿大学和斯坦福大学向本科生和研究生讲授初等及高等编译课程
\r\n
\r\n
出版者的话\r\n专家指导委员会\r\n译者序\r\n前言\r\n第1章 编译简介 1\r\n 1.1 编译器 1\r\n 1.2 源程序分析 3\r\n 1.3 编译器的各阶段 6\r\n 1.4 编译器的伙伴 10\r\n 1.5 编译器各阶段的分组 13\r\n 1.6 编译器的构造工具 14\r\n参考文献注释 15\r\n第2章 简单的一遍编译器 17\r\n 2.1 概述 17\r\n 2.2 语法定义 17\r\n 2.3 语法制导翻译 22\r\n 2.4 语法分析 26\r\n 2.5 简单表达式的翻译器 32\r\n 2.6 词法分析 37\r\n 2.7 符号表 40\r\n 2.8 抽象堆栈机 42\r\n 2.9 技术的综合 46\r\n练习 53\r\n编程练习 54\r\n参考文献注释 55\r\n第3章 词法分析 57\r\n 3.1 词法分析器的作用 57\r\n 3.2 输入缓冲 60\r\n 3.3 记号的描述 62\r\n 3.4 记号的识别 67\r\n 3.5 词法分析器描述语言 72\r\n 3.6 有穷自动机 76\r\n 3.7 从正规表达式到NFA 81\r\n 3.8 设计词法分析器的生成器 85\r\n 3.9 基于DFA的模式匹配器的优化 89\r\n练习 97\r\n编程练习 103\r\n参考文献注释 103\r\n第4章 语法分析 105\r\n 4.1 语法分析器的作用 105\r\n 4.2 上下文无关文法 109\r\n 4.3 文法的编写 113\r\n 4.4 自顶向下语法分析 120\r\n 4.5 自底向上语法分析 128\r\n 4.6 算符优先分析法 134\r\n 4.7 LR语法分析器 142\r\n 4.8 二义文法的应用 163\r\n 4.9 语法分析器的生成器\r\n练习 174\r\n参考文献注释 182\r\n第5章 语法制导翻译 185\r\n 5.1 语法制导定义 185\r\n 5.2 语法树的构造 189 \r\n 5.3 自底向上计算S属性定义 194\r\n 5.4 L属性定义 195\r\n 5.5 自顶向下翻译 198\r\n 5.6 自底向上计算继承属性 202\r\n 5.7 递归计算 207\r\n 5.8 编译时属性值的空间分配 209\r\n 5.9 编译器构造时的空间分配 211\r\n 5.10 语法制导定义的分析 215\r\n练习 219\r\n参考文献注释 221\r\n……\r\n第6章 类型检查 223\r\n第7章 运行时环境 253\r\n第8章 中间代码生成 299\r\n第9章 代码生成 333\r\n第11章 编写一个编译器 469\r\n第12章 编译器实例 475\r\n附录 一个程序设计项目 483\r\n参考文献 489\r\n索引 511 \r\n\r\n\r\n
Alfred V.Aho 于普林斯顿大学获得博士学位,现任贝尔实验室基础科学研究院副院长、计算机科学研究中心主任。在贝尔实验室主要负责计算科学和软件研究工作,已经出版多本算法、数据结构、编译器、数据库系统及计算机科学基础等方面的经典著作。
李建中,哈尔滨工业大学教授,博士生导师,国家杰出青年基金获得者,中国计算机学会理事,中国计算机学会理事,中国计算机学会数据库专业委员会副主任。从事计算机科学技术的教学、研究、开发工作二十余年。主要研究领域为数据库系统与并行计算,主持完成研究项目20余项,在统计与科学数据库、并行数据库、数据仓库、数据挖掘等方面取得了一系列研究成果,在IEEE Transactions on Knowledge and Data Engineering 、VLDB、ACM SIGMOD 等国内外重要学术刊物和学术会议发表学术论文180余篇,出版学术专著和教材4部,获得各类科学技术奖励多项。
本书是 Alfred V.Aho和Jeffrey D.Ullman 所著的《Principles of Compiler Design》一书的后续版本. 与后者类似, 本书也是编译器设计基础课程的教材. 本书的重点是解决人们在设计语言翻译器时遇到的普遍问题, 而不论源和目标机器是什么.
本书介绍的概念和技术不仅适用于编译器的设计, 也适用于一般的软件设计. 例如, 建立词法分析器的串匹配技术已用于文本编辑器. 信息检索系统和模式识别器, 上下文无关文法和语法制导定义等概念已用于设计许多诸如本书产生的排版. 绘图系统这样的小语言, 代码优化技术已用于程序验证器和从非结构化程序产生结构化程序的程序检验器之中. 显然, 本书在目前只有少数人涉及编译器的构造和维护的情况下仍然具有重要的意义和价值.
本书的使用方法
本书深入地讨论了编译器设计的重要主题.
第1章介绍编译器的基本结构, 是阅读本书其余部分的基础.
第2章描述了一个变中缀表达式为后缀表达式的翻译器. 这个翻译器使用本书介绍的一些基本技术构建. 后面的一些章节逐渐地扩展了第2章介绍的内容.
第3章介绍了词法分析器. 正规表达式. 有穷状态机以及词法分析器的生成器工具. 本章的内容已经被广泛地用于文本处理.
第4章深入介绍了常用的语法分析技术. 本书讨论的语法分析技术比较广泛, 从适用于手工实现的递归下降技术到用于语法分析器生成器的计算更密集的LR技术.
第5章介绍了语法制导翻译的主要概念. 本章的内容将被用于本书中说明和实现翻译的其余各章.
第6章介绍了实现静态语义检查的主要思想, 详尽讨论了类型检查与合一问题.
第7章讨论了用于支持程序运行环境的存储组织问题.
第8章首先介绍了中间语言的概念, 然后讨论如何把一般的程序设计语言结构翻译成中间代码的问题.
第9章介绍目标代码生成技术, 包括简单的代码生成方法以及产生表达式代码的优化方法. 本章也讨论了窥孔优化方法和代码生成器的生成器.
第10章全面介绍了代码优化, 详细讨论了各种数据流分析方法和几种主要的全局优化方法.
第11章讨论实现编译器的一些编程问题. 软件工程和软件测试在构造编译器的过程中是非常重要的.
第12章提供几个编译器实例. 这些编译器都使用了本书介绍的技术.
附录A描述了一种简单的语言. 这种语言是Pascal语言的“子集”, 它可以用做实现项目的基础.
本书作者曾使用本书的内容多次在贝尔实验室. 哥伦比亚大学. 普林斯顿大学和斯坦福大学为本科生和研究生讲授初等和高等编译课程.
初等编译课程可以由本书以下章节构成:
简介 第1章. 2.1~2.5节
词法分析 2.6节. 3.1~3.4节
符号表 2.7节. 7.6节
语法分析 2.4节. 4.1~4.4节
语法制导翻译 2.5节. 5.1~5.5节
类型检查 6.1~6.2节
运行环境的组织 7.1~7.3节
中间代码的生成 8.1~8.3节
代码生成 9.1~9.4节
代码优化 10.1~10.2节
第2章描述了编程项目所需的信息.
以编译器构造工具为核心的课程可以包括3.5节的词法分析器的生成器. 4.8节和4.9节的语法分析器的生成器. 9.12节的代码生成器的生成器以及第11章中有关编译器构造技术的内容.
高等编译课程可以由本书的以下内容组成:第3章和第4章介绍的词法分析器的生成器和语法分析器的生成器中使用的算法. 第6章介绍的有关类型等价. 重载. 多态和合一的内容. 第7章介绍的程序运行环境的存储组织. 第9章介绍的模式制导的代码生成方法. 第10章介绍的代码优化.
习题
我们用星号来标记习题的难度. 没有星号的习题检验学生对基本定义的理解, 具有一个星号的习题用于高等编译课程, 具有两个星号的习题是值得深思熟虑的难题.
致谢
在本书的编写过程中, 很多人都对手稿给予了有价值的建议. 在此, 我们对以下人员表示衷心的感谢, 他们是:Bill Appelbe. Nelson Beebe. Jon Bentley. Lois Bogess. Rodney Farrow. Stu Feldman. Charles Fischer. Chris Fraser. Art Gittelman. Eric Grosse. Dave Hanson. Fritz Henglein. Robert Henry. Gerard Holzmann. Steve Johnson. Brian Kernighan. Ken Kubota. Daniel Lehmann. Dave MacQueen. Dianne Maki. Alan Martin. Doug Mcllroy. Charles McLaughlin. John Mitchell. Elliott Organick. Robert Paige. Phil Pfeiffer. Rob Pike. Kari-Jouko R奿h姟ennis Ritchie. Sriram Sankar. Paul Stoecker. Bjarne Stroustrup. Tom Szymanski. Kim Track. Peter Weinberger. Jennifer Widom 和 Reinhard Wilhelm.
作者特别感谢 Patricia Solomon 对本书图片的加工制作. 她的工作热情和专业水准是非常令人钦佩的. 在本书的编写过程中, J.D.Ullman 得到了以色列艺术和科学学会的爱因斯坦奖学金的资助. 最后, 我们要特别感谢贝尔实验室在本书准备过程中对我们的支持.