- 定价:¥89.00
- 校园优惠价:¥62.30 (70折) (马上了解)
- 评分:
(已有211条评价)
- 促销活动:
- 我要买:
基本信息
- 原书名:Compilers: Principles, Techniques, and Tools (2nd Edition)
- 原出版社: Addison Wesley
- 作者: (美)Alfred V.Aho Monica S.Lam Ravi Sethi Jeffrey D.Ullman
- 译者: 赵建华 郑滔 戴新宇
- 丛书名: 计算机科学丛书
- 出版社:机械工业出版社
- ISBN:9787111251217
- 上架时间:2008-12-1
- 出版日期:2009 年1月
- 开本:16开
- 页码:631
- 版次:2-1
- 所属分类:计算机 > 软件与程序设计 > 汇编语言/编译原理 > 编译原理
教材

【插图】

编辑推荐
编译领域里程碑式的经典著作——龙书,20年后终于出版新版!
这是一个延绵30年的故事,这是一部关于龙书的传奇!
最新版本,增添两章节内容,使龙书地位更权威!
内容简介
作译者
目录
译者序
前言
第1章 引论
1.1 语言处理器
1.2 一个编译器的结构
1.2.1 词法分析
1.2.2 语法分析
1.2.3 语义分析
1.2.4 中间代码生成
1.2.5 代码优化
1.2.6 代码生成
1.2.7 符号表管理
1.2.8 将多个步骤组合成趟
1.2.9 编译器构造工具
1.3 程序设计语言的发展历程
1.3.1 走向高级程序设计语言
1.3.2 对编译器的影响
1.3.3 1.3节的练习
1.4 构建一个编译器的相关科学
译者序
A.V.Aho等人撰写的《Compilers:Principles,Techniques,and Tools》被誉为编译教科书中的“龙书”。这说明《编译原理》具有很高的权威性。我们有幸受机械工业出版社的委托,翻译龙书的第2版。
《编译原理》不仅包含了词法分析、语法分析、语义分析、代码生成等传统、经典的编译知识,还详细介绍了一些最新研究成果,比如过程间指针分析的最新进展。这使得本书不仅适用于编译原理的初学者,还可以作为研究人员的参考书目。《编译原理》不仅介绍编译器构造的基本原理和技术,还详细介绍一些有用的编译器构造工具,比如对Lex和Yacc的介绍使得读者可以了解这些工具的工作原理和使用方法。除此之外,读者还可以看到很多其他领域的概念在编译器构造中的应用。比如在第9章,读者可以看到群论中的抽象概念“格”被完美地应用于数据流分析算法的设计。而在第11章,线性规划和整数规划技术被成功地应用于程序并行化技术。这些内容对拓展读者的视野和思路有很大的好处。..
由于《编译原理》覆盖的范围非常广,不可能在一个学期内讲完《编译原理》的全部内容。因此我建议采用《编译原理》作为本科生教材的老师只选择讲授其中的基础部分,即第1章到第9章中的大部分内容。第2章是对后面各章内容的介绍,可以在讲授相应内容之前指导学生预习。
最后感谢机械工业出版社的温莉芳女士以及姚蕾和朱劫两位编辑在《编译原理》的翻译过程中给予我们的有力帮助,也感谢其他给予我们支持的同事。由于水平有限,翻译中的错漏之处在所难免,欢迎读者批评指正。...
译者
2008年6月于南京
前言
因此,《编译原理》先前的版本所体现的我们的价值观一直没有改变。我们知道,只有很少的读者将会去构建甚至维护一个主流程序设计语言的编译器。但是,和编译器相关的模型、理论和算法可以被应用到软件设计和开发中出现的各种各样的问题上。因此,我们会关注那些在设计一个语言处理器时常常会碰到的问题,而不考虑具体的源语言和目标机器究竟是什么。
使用《编译原理》
要学完《编译原理》的全部或大部分内容至少需要两个学季(quarter),甚至两个学期(semester)。通常会在一门本科课程中讲授《编译原理》的前半部分内容;而《编译原理》的后半部分(强调代码优化)会在研究生层面或另一门小范围的课程中讲授。下面是各章的概要介绍:
第1章给出一些关于学习动机的资料,同时也将给出一些关于计算机体系结构和程序设计语言原则的背景知识。
第2章会开发一个小型的编译器,并介绍很多重要概念。这些概念将在后面的各章中深入介绍。这个编译器本身将在附录中给出。
第3章将讨论词法分析、正则表达式、有穷状态自动机和词法分析器的生成器工具。这些内容是各种文本处理的基础。
第4章将讨论主流的语法分析方法,包括自顶向下方法(递归下降法、LL技术)和自底向上方法(LR技术和它的变体)。
第5章将介绍语法制导定义和语法制导翻译的基本思想。
第6章将使用第5章中的理论,并说明如何使用这些理论为一个典型的程序设计语言生成中间代码。
第7章将讨论运行时刻环境,特别是运行时刻栈的管理和垃圾回收机制。
第8章将主要讨论目标代码生成技术。该章会讨论基本块的构造,从表达式和基本块生成代码的方法,以及寄存器分配技术。
第9章将介绍代码优化技术,包括流图、数据流分析框架以及求解这些框架的迭代算法。
第10章将讨论指令级优化。该章的重点是从小段指令代码中抽取并行性,并在那些可以同时做多件事情的单处理器上调度这些指令。
第11章将介绍大规模并行性的检测和利用。这里的重点是数值计算代码。这些代码具有对多维数组进行遍历的紧致循环。
第12章将介绍过程间分析技术。它将讨论指针分析、别名和数据流分析。这些分析都考虑了到达代码中某个给定点时的过程调用序列。
哥伦比亚大学、哈佛大学、斯坦福大学已经开设了讲授《编译原理》内容的课程。哥伦比亚大学定期开设一门关于程序设计语言和翻译器的课程,使用了《编译原理》前8章的内容。该课程常年面向高年级本科生/一年级研究生讲授,这门课程的亮点是一个长达一个学期的课程实践项目。在该项目中,学生分成小组,创建并实现一个他们自己设计的小型语言。学生创建的语言涉及多个应用领域,包括量子计算、音乐合成、计算机图形学、游戏、矩阵运算和很多其他领域。在构建他们自己的编译器时,学生们使用了很多种可以生成编译器组件的工具,比如ANTLR、Lex和Yacc;他们还使用了第2章和第5章中讨论的语法制导翻译技术。后续的研究生课程的重点是本书第9章到第12章的内容,着重强调适用于当代计算机(包括网络处理器和多处理器体系结构)的代码生成和优化技术。..
斯坦福大学开设了一门历时一个学季的入门课程,大致涵盖了《编译原理》第1章到第8章的内容,同时还会简介《编译原理》第9章中全局代码优化的相关内容。第二门编译器课程包括本书第9章到第12章的内容,另外还包括第7章中更为深入的有关垃圾收集的内容。学生使用一个该校开发的、基于Java的系统Joeq来实现数据流分析算法。
预备知识
学习《编译原理》的读者应该拥有一些“计算机科学的综合知识”,至少学过两门程序设计课程,以及数据结构和离散数学的课程。具备多种程序设计语言的知识对学习本书会有所帮助。
媒体评论
第三,我们需要使编译时间保持在较短的范围内,以支持快速的开发和调试周期。当机器变得越来越快,这个要求会越来越容易达到。开始时,一个程序经常在没有进行优化的情况下开发和调试。这么做不仅可以降低编译时间,更重要的是未经优化的程序比较容易调试。这是因为编译器引入的优化经常使得源代码和目标代码之间的关系变得模糊。在编译器中开启优化有时会暴露出源程序中的新问题,因此需要对经过优化的代码再次进行测试。因为可能需要额外的测试工作,有时会阻止人们在应用中使用优化技术,当应用的性能不很重要的时候更是如此。
最后,编译器是一个复杂的系统,我们必须使系统保持简单以保证编译器的设计和维护费用是可管理的。我们可以实现的优化技术有无穷多种,而创建一个正确有效的优化过程需要相当大的工作量。我们必须划分不同优化技术的优先级别,只实现那些可以对实践中遇到的源程序带来最大好处的技术。
因此,我们在研究编译器时不仅要学习如何构造一个编译器,还要学习解决复杂和开放性问题的一般方法学。在编译器开发中用到的方法涉及理论和实验。在开始的时候,我们通常根据直觉确定有哪些重要的问题并把它们明确描述出来。
……
书摘
4.1 引论
在本节中,我们将考察语法分析器是按照什么方法被集成到一个典型的编译器中的。然后我们将研究算术表达式的典型文法。表达式文法已经足以演示语法分析的本质,因为处理表达式的语法分析技术可以被用于处理程序设计语言的大部分构造。这一节的最后讨论了错误处理的问题,因为当语法分析程序发现它的输入不能由它的文法生成时,它必须作出得体的反应。
4.1.1 语法分析器的角色
在我们的编译器模型中,语法分析器从词法分析器获得一个由词法单元组成的串,并验证这个串可以由源语言的文法生成,如图4.1所示。我们期望语法分析器能够以易于理解的方式报告语法错误,并且能够从常见的错误中恢复并继续处理程序的其余部分。从概念上讲,对于良构的程序,语法分析器构造出一棵语法分析树,并把它传递给编译器的其余部分进一步处理。实际上并不需要显式地构造出这棵语法分析树,因为正如我们将看到的,对源程序的检查和翻译处理可以和语法分析过程交错完成。因此,语法分析器和前端的其它部分可以用一个模块来实现。
……