《现代编译原理》试读:前言

近十余年来,编译器的构建方法出现了一些新的变化。一些新的程序设计语言得到应用,例如,具有动态方法的面向对象语言、具有嵌套作用域和一等函数闭包(first-classfunctionclo-sure)的函数式语言等。这些语言中有许多都需要垃圾收集技术的支持。另一方面,新的计算机都有较大的寄存器集合,且存储器访问成为了影响性能的主要因素。这类机器在具有指令调度能力并能对指令和数据高速缓存(cache)进行局部性优化的编译器辅助下,常常能运行得更快。 本书可作为一到两个学期编译课程的教材。学生将看到编译器不同部分中隐含的理论,学习到将这些理论付诸实现时使用的程序设计技术和以模块化方式实现该编译器时使用的接口。为了清晰具体地给出这些接口和程序设计的例子,我使用C 语言来编写它们。本(序列)书还有使用ML和Java语言的另外两个版本。 实现项目。我在书中概述了一个“学生项目编译器”,它相当简单,而且其安排方式也便于说明现在常用的一些重要技术。这些技术包括避免语法和语义相互纠缠的抽象语法树,独立于寄存器分配的指令选择,能使编译器前期阶段有更多灵活性的复写传播,以及防止从属于特定目标机的方法。与其他许多教材中的“学生编译器”不同,本书中采用的编译器有一个简单而完整的后端,它允许在指令选择之后进行寄存器分配。 本书第一部分中,每一章都有一个与编译器的某个模块对应的程序设计习题。在http://www.cs.princeton.edu/~appel/modern/c中可找到对这些习题有帮助的一些软件。 习题。每一章都有一些书面习题;标有一个星号的习题有点挑战性,标有两个星号的习题较难但仍可解决,偶尔出现的标有三个星号的习题是一些尚未找到解决方法的问题。 授课顺序。图0-1展示了各章相互之间的依赖关系。 图0-1 内容结构图 ■一学期的课程可包含第一部分的所有章节(第1~12章),同时让学生实现项目编译器(多半按项目组的方式进行)。另外,授课内容中还可以包含从第二部分中选择的一些主题。 ■高级课程或研究生课程可包含第二部分的内容,以及另外一些来自其他文献的主题。第二部分中有许多章节与第一部分无关,因此,对于那些在初始课程中使用不同教材的学生而言,仍然可以给他们讲授高级课程。 ■若按两个半个学期来安排教学,则前半学期可包含第1~8章,后半学期包括第9~12章和第二部分的某些章。 致谢。对于本书,许多人给我提出了富有建设性的意见,或在其他方面给我提供了帮助。我要感谢这些人,他们是LeonorAbraido-Fandino、ScottAnanian、StephenBailey、Max Hailp-erin、David Hanson、Jeffrey Hsu、David MacQueen、Torben Mogensen、Doug Morgan、RobertNetzer、ElmaLee Noah、MikaelPetterson、ToddProebsting、Anne Rogers、Barbara Ryder、AmrSabry、MoolySagiv、ZhongShao、MaryLouSoffa、Andrew Tolmach、Kwangkeun Yi和KennethZadeck。

>现代编译原理

现代编译原理
作者: [美]Andrew W.Appel, [美]MaiaGinsburg
副标题: C语言描述(修订版)
isbn: 7115476888
书名: 现代编译原理
页数: 400
出品方: 图灵教育
译者: 赵克佳, 黄春, 沈志宇
定价: 89.00元
出版社: 人民邮电出版社
出版年: 2018-4
装帧: 平装