编译原理 技术与工具(第二版)(英文版)
基本信息
- 作者: (美)Alfred V.Aho Monica S.Lam Ravi Sethi Jeffrey D.Ullman [作译者介绍]
- 丛书名: 国外著名高等院校信息科学与技术优秀教材
- 出版社:人民邮电出版社
- ISBN:9787115172655
- 上架时间:2008-1-28
- 出版日期:2008 年2月
- 开本:16开
- 页码:1009
- 版次:1-1
- 所属分类:
计算机 > 软件与程序设计 > 汇编语言/编译原理 > 编译原理
教材 > 研究生/本科/专科教材 > 工学 > 计算机
教材 > 计算机教材 > 本科/研究生 > 计算机专业教材 > 计算机专业课程 > 程序设计
教材 > 教材汇编分册 > 高等理工
本版教材征订号:00470907544
编辑推荐
神龙再现,王者归来!
编译器技术经典巨著“龙书”全新第二版时隔二十年辉煌登场!
全面总结编辑器技术二十年来的最新进展,深入阐释通用的软件开发核心技术!
推荐阅读
内容简介回到顶部↑
作为编译器设计的教程,本书重点主要放在解决设计语言翻泽器过程中普遍需要面对的一些问题上,而并不考虑源语言或者目标机器。本书共 12章。第一章是一些关于学习动机的资料,同时也给出了一些关于计算机体系结构和程序设计语言原理的背景知识。第二章开发了一个缩微的编译器,并介绍了很多重要的概念,这些概念将在后面的各个章节中深入介绍。这个编译器本身在附录中给出。第三章讨论了词法分析、正则表达式、有穷状态自动机和词法分析器的生成工具,这些内容是各种正文处理的基础。第四章讨论了主流的语法分析方法,包括自顶向下方法(递归下降法, ll技术)和自底向上方法(lr技术和它的变体)。第五章介绍了语法制导定义和语法制导翻译的基本思想。第六章介绍了如何使用第五章中的理论为一个典型的程序设计语言生成中间代码。第七章讨论了运行时刻环境,主要是运行时刻栈的管理和垃圾收集机制。第八章介绍了关于目标代码生成的内容,主要讨论了基本块的构造,从表达式和基本块生成代码的方法,以及寄存器分配技术。第九章介绍了代码优化技术,包括流图、数据流分析框架以及求解这些框架的迭代算法。第十章讨论了指令级优化。该章的重点是从小段指令代码中抽取并行性,并在那些可以同时做多件事情的单处理器上调度这些指令。第十一章讲的是大规模并行的检测和利用。这章的重点是数值计算代码,这些代码具有对多维数组进行遍历的紧致循环。第十二章介绍的是关于过程间分析技术的内容,讨论了指针分析、别名和数据流分析,这些分析中都考虑了到达代码中某个给定点时的过程调用序列。
本书可作为高校计算机专业本科和研究生编译原理的教科书,也可供从事计算机软件开发的人员参考。
本书可作为高校计算机专业本科和研究生编译原理的教科书,也可供从事计算机软件开发的人员参考。
作译者回到顶部↑
本书提供作译者介绍
Alfred V.Aho是哥伦比亚大学的Lawrence Gussman计算机科学教授。Aho教授多次获奖,其中包括哥伦比亚校友会颁发的2003年度Great Teacher奖和电子与电器工程师协会的John von Neumann奖章。他是美国国家工程院院士,以AACM和IEEE的会员。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
1 introduction
1.1 language processors
1.1.1 exercises for section 1.1
1.2 the structure of a compiler
1.2.1 lexical analysis
1.2.2 syntax analysis
1.2.3 semantic analysis
1.2.4 intermediate code generation
1.2.5 code optimization
1.2.6 code generation
1.2.7 symbol-table management
1.2.8 the grouping of phases into passes
1.2.9 compiler-construction tools
1.3 the evolution of programming languages
1.3.1 the move to higher-level languages
1.3.2 impacts on compilers
1.3.3 exercises for section 1.3
1.4 the science of building a compiler
1.4.1 modeling in compiler design and implementation
1.4.2 the science of code optimization
1.1 language processors
1.1.1 exercises for section 1.1
1.2 the structure of a compiler
1.2.1 lexical analysis
1.2.2 syntax analysis
1.2.3 semantic analysis
1.2.4 intermediate code generation
1.2.5 code optimization
1.2.6 code generation
1.2.7 symbol-table management
1.2.8 the grouping of phases into passes
1.2.9 compiler-construction tools
1.3 the evolution of programming languages
1.3.1 the move to higher-level languages
1.3.2 impacts on compilers
1.3.3 exercises for section 1.3
1.4 the science of building a compiler
1.4.1 modeling in compiler design and implementation
1.4.2 the science of code optimization
前言回到顶部↑
从本书的1986版出版到现在,编译器设计的世界已经发生了很大的改变。程序设计语言的发展提出了新的编译问题。计算机体系结构提供了多种多样的资源,而编译器设计者必须能够充分利用这些资源。可能最有意思的事情是,古老的代码优化技术已经在编译器之外找到了新的应用。现在,这些技术被有些工具用于寻找软件中的错误,以及最重要的是,寻找现有代码中的安全漏洞。并且,很多“前端”技术——文法、正则表达式、语法分析器以及语法制导翻译器等——仍然被广泛应用。.
因此,本书的先前版本所体现的我们的价值观一直没有改变。我们认识到只有很少的读者将会去构建甚至维护一个主流程序设计语言的编译器。但是,和编译器相关的模型、理论和算法可以被应用到软件设计和开发中出现的各种各样的问题上。因此我们的重点是那些在设计一个语言处理器时常常会碰到的问题,而不考虑具体的源语言和目标机器究竟是什么。
使用本书
要学完本书的全部或大部分内容至少需要两个季度甚至两个学期。通常会在一门本科课程中讲授本书的前半部分内容;而本书的后半部分——强调代码优化——会在研究生层面或小范围的另一门课程中讲授。下面是各个章节的概要介绍。
第一章是一些关于学习动机的资料,同时也给出了一些关于计算机体系结构和程序设计语言原理的背景知识。
第二章开发了一个缩微的编译器,并介绍了很多重要的概念。这些概念将在后面的各个章节中深入介绍。这个编译器本身在附录中给出。
第三章讨论了司法分析、正则表达式,有穷状态自动机和词法分析器的生成工具。这些内容是各种正文处理的基础。
第四章讨论了主流的语法分析方法, 包括自顶向下方法(递归下降法,LL技术)和自底向上方法(LR技术和它的变体)。
第五章介绍了语法制导定义和语法制导翻译的基本思想。
第六章使用第五章中的理论,显示了如何使用这些理论为一个典型的程序设计语言生成中间代码。
第七章讨论了运行时刻环境,主要是运行时刻栈的管理和垃圾收集机制。
第八章介绍关于目标代码生成的内容。它讨论了基本块的构造,从表达式和基本块生成代码的方法,以及寄存器分配技术。
第九章介绍了代码优化技术,包括流图、数据流分析框架以及求解这些框架的迭代算法。..
第十章讨论了指令级优化。本章的重点是从小段指令代码中抽取并行性,并在那些可以同时做多件事情的单处理器上调度这些指令。
第十一章讲的是大规模并行的检测和利用。这里的重点是数值计算代码。这些代码具有对多维数组进行遍历的紧致循环。
第十二章介绍关于过程间分析技术的内容。它讨论了指针分析、别名和数据流分析。这些分析中都考虑了到达代码中某个给定点时的过程调用序列。
一些使用本书内容的课程已经在哥伦比亚大学、哈佛大学、斯坦福讲授。在哥伦比亚,一门关于程序设计语言和翻译器的课程使用了本书前八章的内容。该课程常年面向高年级本科生/一年级研究生讲授。这门课程的亮点是一个长达一学期的课程实践项目。在该项目中,学生分成小组,创建并实现一个他们自己设计的小型语言。学生创建的语言涉及多个应用领域,包括量子计算、音乐合成、计算机图形学、游戏、矩阵运算和很多其他领域。在构建他们自己的编译器时,学生们使用了很多种可以生成编译器组件的工具,比如ANTLR、Lex和Yacc,他们还使用了第二章和第五章中讨论的语法制导翻译技术。后续的研究生课程的重点是本书第九章到第十二章的内容,着重强调针对当代计算机的代码生成和优化。这些计算机包括网络处理器和多处理器体系结构。
在斯坦福,一门一个季度的入门课程大致涵盖了第一章到第八章的内容,同时还包括了对第九章中全局代码优化的介绍。第二门编译器课程包括了第九章到第十二章,另外还包括了第七章中有关垃圾收集的深入内容。学生使用一个本校开发的、基于Java的系统Joeq来实现数据流分析算法。
课程的预备知识
读者应该拥有一些“计算机科学的综合知识”,至少学过两门关于编程的课程,以及关于数据结构和离散数学的课程。有关多个不同程序设计语言的知识对本课程的学习会有所帮助。
因此,本书的先前版本所体现的我们的价值观一直没有改变。我们认识到只有很少的读者将会去构建甚至维护一个主流程序设计语言的编译器。但是,和编译器相关的模型、理论和算法可以被应用到软件设计和开发中出现的各种各样的问题上。因此我们的重点是那些在设计一个语言处理器时常常会碰到的问题,而不考虑具体的源语言和目标机器究竟是什么。
使用本书
要学完本书的全部或大部分内容至少需要两个季度甚至两个学期。通常会在一门本科课程中讲授本书的前半部分内容;而本书的后半部分——强调代码优化——会在研究生层面或小范围的另一门课程中讲授。下面是各个章节的概要介绍。
第一章是一些关于学习动机的资料,同时也给出了一些关于计算机体系结构和程序设计语言原理的背景知识。
第二章开发了一个缩微的编译器,并介绍了很多重要的概念。这些概念将在后面的各个章节中深入介绍。这个编译器本身在附录中给出。
第三章讨论了司法分析、正则表达式,有穷状态自动机和词法分析器的生成工具。这些内容是各种正文处理的基础。
第四章讨论了主流的语法分析方法, 包括自顶向下方法(递归下降法,LL技术)和自底向上方法(LR技术和它的变体)。
第五章介绍了语法制导定义和语法制导翻译的基本思想。
第六章使用第五章中的理论,显示了如何使用这些理论为一个典型的程序设计语言生成中间代码。
第七章讨论了运行时刻环境,主要是运行时刻栈的管理和垃圾收集机制。
第八章介绍关于目标代码生成的内容。它讨论了基本块的构造,从表达式和基本块生成代码的方法,以及寄存器分配技术。
第九章介绍了代码优化技术,包括流图、数据流分析框架以及求解这些框架的迭代算法。..
第十章讨论了指令级优化。本章的重点是从小段指令代码中抽取并行性,并在那些可以同时做多件事情的单处理器上调度这些指令。
第十一章讲的是大规模并行的检测和利用。这里的重点是数值计算代码。这些代码具有对多维数组进行遍历的紧致循环。
第十二章介绍关于过程间分析技术的内容。它讨论了指针分析、别名和数据流分析。这些分析中都考虑了到达代码中某个给定点时的过程调用序列。
一些使用本书内容的课程已经在哥伦比亚大学、哈佛大学、斯坦福讲授。在哥伦比亚,一门关于程序设计语言和翻译器的课程使用了本书前八章的内容。该课程常年面向高年级本科生/一年级研究生讲授。这门课程的亮点是一个长达一学期的课程实践项目。在该项目中,学生分成小组,创建并实现一个他们自己设计的小型语言。学生创建的语言涉及多个应用领域,包括量子计算、音乐合成、计算机图形学、游戏、矩阵运算和很多其他领域。在构建他们自己的编译器时,学生们使用了很多种可以生成编译器组件的工具,比如ANTLR、Lex和Yacc,他们还使用了第二章和第五章中讨论的语法制导翻译技术。后续的研究生课程的重点是本书第九章到第十二章的内容,着重强调针对当代计算机的代码生成和优化。这些计算机包括网络处理器和多处理器体系结构。
在斯坦福,一门一个季度的入门课程大致涵盖了第一章到第八章的内容,同时还包括了对第九章中全局代码优化的介绍。第二门编译器课程包括了第九章到第十二章,另外还包括了第七章中有关垃圾收集的深入内容。学生使用一个本校开发的、基于Java的系统Joeq来实现数据流分析算法。
课程的预备知识
读者应该拥有一些“计算机科学的综合知识”,至少学过两门关于编程的课程,以及关于数据结构和离散数学的课程。有关多个不同程序设计语言的知识对本课程的学习会有所帮助。
【插图】








点击看大图





加载中...

