编译原理(第2版)

本书为编译领域经典,由Aho等著,被称为龙书。全面覆盖编译器设计,包括词法分析、语法分析、代码优化等,适合作为计算机专业教材。

网站

更多书籍点击进入>> CiCi岛

下载

电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍

封页

封页

编辑推荐

 

编译领域里程碑式的经典著作——龙书,20年后终于出版新版!这是一个延绵30年的故事,这是一部关于龙书的传奇!**版本,增添两章节内容,使龙书地位更权威!
  本书是编译领域无可替代的经典著作,被广大计算机专业人士誉为“龙书”。本书上一版自1986年出版以来,被世界各地的著名高等院校和研究机构(包括美国哥伦比亚大学、斯坦福大学、哈佛大学、普林斯顿大学、贝尔实验室)作为本科生和研究生的编译原理课程的教材。该书对我国高等计算机教育领域也产生了重大影响。
  第2版对每一章都进行了全面的修订,以反映自上一版出版20多年来软件工程。程序设计语言和计算机体系结构方面的发展对编译技术的影响。本书全面介绍了编译器的设计,并强调编译技术在软件设计和开发中的广泛应用。每章中都包含大量的习题和丰富的参考文献。
  本书适合作为高等院校计算机专业本科生和研究生的编译原理与技术课程的教材,也可供广大计算机技术人员参考。
1977年,Alfred V.Aho和Jeffrey D.Ullman合作出版了《Principies of CompiletDesign》,封面是一位骑士和一只恐龙,那恐龙是绿色的,因此被称为龙书或绿龙书。
1986年,原来的两位作者加上RaviSethi,升级了前一本书,书名改为《compiIers:Principles,Techniques andTools》,封面依然沿用骑士和恐龙,那恐龙是红色的,因此被称为龙书二或者红龙书。
又过了一个9年又一个9年,编译领域的巨无霸——龙书始终都没有升级。
终于在2006年底,龙书升级了。作者又增加了MonicaS.Lam,名字与龙书二相同,封面依然沿用恐龙和武士的设计,这次的龙是紫色的,因此被称为龙书三或者紫龙书。

 

更多经典图书推荐

《算法导论》第3版中文版隆重上市!点击进入

《C 程序设计语言(特别版)十周年中文纪念版》点击进入

《深入理解计算机系统(原书第2版)》点击进入

《算法导论(原书第2版)》点击进入

《Java编程思想第4版》点击进入

《计算机程序的构造和解释(原书第2版)》点击进入

《数据结构与算法分析——C语言描述(原书第2版)》点击进入

《数据库系统概念(原书第5版)》点击进入

 

内容简介

本书全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面修订,涵盖了编译器开发方面*进展。每章中都提供了大量的实例及参考文献。   本书是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的极佳参考读物。

作者简介

AlfredV.Aho,美国歌伦比亚大学教授,美国国家工程院院士,ACM和IEEE会士,曾获得IEEE的冯·诺伊曼奖。著有多部算法、数据结构、编译器、数据库系统及计算机科学基础方面的著作。

目 录

出版者的话
译者序
前言
第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 构建一个编译器的相关科学
  1.4.1 编译器设计和实现中的建模
  1.4.2 代码优化的科学
 1.5 编译技术的应用
  1.5.1 高级程序设计语言的实现
  1.5.2 针对计算机体系结构的优化
  1.5.3 新计算机体系结构的设计
  1.5.4 程序翻译
  1.5.5 软件生产率工具
 1.6 程序设计语言基础
  1.6.1 静态和动态的区别
  1.6.2 环境与状态
  1.6.3 静态作用域和块结构
  1.6.4 显式访问控制
  1.6.5 动态作用域
  1.6.6 参数传递机制
  1.6.7 别名
  1.6.8 1.6节的练习
 1.7 第1章的总结
 1.8 第1章的参考书目
第2章 一个简单的语法制导翻译器
 2.1 引言
 2.2 语法定义
  2.2.1 文法定义
  2.2.2 推导
  2.2.3 语法分析树
  2.2.4 二义性
  2.2.5 运算符的结合性
  2.2.6 运算符的优先级
  2.2.7 2.2节的练习
 2.3 语法制导翻译
  2.3.1 后缀表示
  2.3.2 综合属性
  2.3.3 简单语法制导定义
  2.3.4 树的遍历
  2.3.5 翻译方案
  2.3.6 2.3节的练习
 2.4 语法分析
  2.4.1 自顶向下分析方法
  2.4.2 预测分析法
  2.4.3 何时使用产生式
  2.4.4 设计一个预测语法分析器
  2.4.5 左递归
  2.4.6 2.4节的练习
 2.5 简单表达式的翻译器
  2.5.1抽象语法和具体语法
  2.5.2调整翻译方案
  2.5.3非终结符号的过程
  2.5.4 翻译器的简化
  2.5.5 完整的程序
 2.6 词法分析
  2.6.1 剔除空白和注释
  2.6.2 预读
  2.6.3 常量
  2.6.4 识别关键字和标识符
  2.6.5 词法分析器
  2.6.6 2.6节的练习
 2.7 符号表
  2.7.1 为每个作用域设置一个符号表
  2.7.2 符号表的使用
 2.8 中间代码生成
  2.8.1 两种中间表示形式
  2.8.2 语法树的构造
  2.8.4 三地址码
  2.8.5 2.8节的练习
 2.9 第2章的总结
第3章 词法分析
 3.1 词法分析器的作用
  3.1.1 词法分析及解析
  3.1.2 词法单元、模式、词素
  3.1.3 词法单元的属性
  3.1.4 词法错误
  3.1.5 3.1节的练习
 3.2 输入缓冲
  3.2.1 缓冲区对
  3.2.2 哨兵标记
 3.3 词法单元的规约
 3.3.1 串和语言
  3.3.2 语言上的运算
  3.3.3 正则表达式
  3.3.4 正则定义
  3.3.5 正则表达式的扩展
  3.3.6 3.3节的练习
 3.4 词法单元的识别
  3.4.1 状态转换图
  3.4.2 保留字和标识符的识别
  3.4.3 完成我们的连续性例子
  3.4.4 基于状态转换图的词法分析器的体系结构
  3.4.5 3.4节的练习
 3.5 词法分析器生成工具Lex
  3.5.1 Lex的使用
  3.5.2 Lex程序的结构
  3.5.3 Lex中的冲突解决
  3.5.4 向前看运算符
  3.5.5 3.5节练习
 3.6 有穷自动机
  3.6.1 不确定的有穷自动机
  3.6.2 转换表
  3.6.3 NFA接受输入字符串
  3.6.4 确定的有穷自动机
  3.6.5 3.6节的练习
 3.7 从正则表达式到自动机
  3.7.1 从NFA到DFA的转换
  3.7.2 NFA的模拟
  3.7.3 NFA模拟效率
  3.7.4 从正则表达式构造NFA
  3.7.5 字符串处理算法的效率
  3.7.6 3.7节的练习
 3.8 词法分析器生成工具的设计
  3.8.1 被生成的词法分析器的结构
  3.8.2 基于NFA的模式匹配
  3.8.3 词法分析器使用的DFA
  3.8.4 实现向前看运算符
  3.8.5 3.8的练习
 3.9 基于DFA的模式匹配器的优化
  3.9.1 NFA的重要状态
  3.9.2 根据抽象语法树计算得到的函数
  3.9.3 计算nullable、firstpos及lastpos
  3.9.4 计算followpos
  3.9.5 根据正则表达式构建DFA
  3.9.6 最小化一个DFA的状态数
  3.9.7 词法分析器的状态最小化
  3.9.8 在DFA模拟中用时间换取空间
  3.9.9 3.9节的练习
  3.9.10 第3章的总结
 3.11 第3章参考文献
第4章 语法分析
 4.1 引论
  4.1.1 语法分析器的角色
  4.1.2 代表性的文法
  4.1.3 语法错误的处理
  4.1.4 错误恢复策略
 4.2 上下文无关文法
  4.2.1 上下文无关文法的正式定义
  4.2.2 符号表示的惯例
  4.2.3 推导
4.2.4 语法分析树和推导
  4.2.5 二义性
  4.2.6 验证文法生成的语言
  4.2.7上下文无关文法和正则表达式
  4.2.8 4.2节的练习
 4.3 设计文法
  4.3.1 词法分析和语法分析
  4.3.2 消除二义性
  4.3.3 左递归的消除
  4.3.4 提取左公因子
  4.3.5 非上下文无关的语言构造
  4.3.6 4.3节的练习
 4.4 自顶向下的语法分析
  4.4.1 递归下降的语法分析
  4.4.2 FIRST和FOLLOW
  4.4.3 LL(1)文法
  4.4.4 非递归的预测分析
  4.4.5 预测分析中的错误恢复
  4.4.6 4.4节的练习
 4.5 自底向上的语法分析
  4.5.1 归约
  4.5.2 句柄剪枝
  4.5.3 移入-归约语法分析技术
  4.5.4 移入-归约语法分析中的冲突
  4.5.5 4.5节的练习
 4.6 LR语法分析技术介绍:简单LR技术
  4.6.1 为什么使用LR语法分析器?
  4.6.2 项和LR(0)自动机
  4.6.3 LR-语法分析算法
  4.6.4 构造SLR-分析表
  4.6.5 可行前缀
  4.6.6 4.6节的练习
 4.7 更强大的LR语法分析器
  4.7.1 规范LR(1)项
  4.7.2 构造LR(1)项集
  4.7.3 规范LR(1)分析表
  4.7.4 构造LALR语法分析表
  4.7.5 LALR语法分析表的高效构造方法
  4.7.6 LR语法分析表的压缩
  4.7.7 4.7节的练习
 4.8 使用二义性文法
  4.8.1 用优先级和结合性解决冲突
  4.8.2 “悬空-else”二义性
  4.8.3 LR语法分析中的错误恢复
  4.8.4 4.8节的练习
 4.9 语法分析器的生成工具
  4.9.1 语法分析器的生成工具Yacc
  4.9.2 使用Yacc处理二义性文法
  4.9.3 用Lex创建Yacc的词法分析器
  4.9.4 Yacc中的错误恢复
  4.9.5 4.9节的练习
 4.10:第4章的小结
 4.11 第4章的参考文献
第5章 语法制导的翻译
 5.1 语法制导定义
  5.1.1 继承属性和综合属性
  5.1.2 在一棵语法分析树的结点上对一个SDD求值
  5.1.3 5.1节的练习
 5.2 SDD的求值顺序
  5.2.1 依赖图
  5.2.2 属性求值的顺序
  5.2.3 S-属性定义
  5.2.4 L-属性定义
  5.2.5 具有受控副作用的语义规则
  5.2.6 5.2节的练习
 5.3 语法制导翻译的应用
  5.3.1 抽象语法树的构造
  5.3.2 类型的结构
  5.3.3 5.3节的练习
 5.4 语法制导的翻译方案
  5.4.1 后缀翻译方案
  5.4.2 后缀SDT的语法分析栈实现
  5.4.3 产生式内部带有语义动作的SDT
  5.4.4 从SDT中消除左递归
  5.4.5 L-属性定义的SDT
  5.4.6 5.4节的练习
 5.5 实现L-属性的SDD
  5.5.1 在递归下降语法分析过程中进行翻译
  5.5.2 边扫描边生成代码
  5.5.3 L-属性的SDD和LL语法分析
  5.5.4 L-属性的SDD的自底向上语法分析
  5.5.5 5.5节的练习  
 5.6 第5章的总结
 5.7 第5章的参考文献
第6章 中间代码生成
第7章 运行时刻环境
第7章 总结
第8章 代码生成
第9章 机器无关优化
第10章 指令级并行
第11章 并行性和局部性的优化
第12章 过程间分析

目 录 译者序 前言 第1章 概论 1 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY编译器 15 1.7.3 TM机 17 1.8 C-Minus:编译器项目的一种语言 18 练习 19 注意与参考 20 第2章 词法分析 21 2.1 扫描处理 21 2.2 正则表达式 23 2.2.1 正则表达式的定义 23 2.2.2 正则表达式的扩展 27 2.2.3 程序设计语言记号的正则表达式 29 2.3 有穷自动机 32 2.3.1 确定性有穷自动机的定义 32 2.3.2 先行、回溯和非确定性自动机 36 2.3.3 用代码实现有穷自动机 41 2.4 从正则表达式到DFA 45 2.4.1 从正则表达式到NFA 45 2.4.2 从NFA到DFA 48 2.4.3 利用子集构造模拟NFA 50 2.4.4 将DFA中的状态数最小化 51 2.5 TINY扫描程序的实现 52 2.5.1 为样本语言TINY实现一个扫描 程序 53 2.5.2 保留字与标识符 56 2.5.3 为标识符分配空间 57 2.6 利用Lex 自动生成扫描程序 57 2.6.1 正则表达式的Lex 约定 58 2.6.2 Lex输入文件的格式 59 2.6.3 使用Lex的TINY扫描程序 64 练习 65 编程练习 67 注意与参考 67 第3章 上下文无关文法及分析 69 3.1 分析过程 69 3.2 上下文无关文法 70 3.2.1 与正则表达式比较 70 3.2.2 上下文无关文法规则的说明 71 3.2.3 推导及由文法定义的语言 72 3.3 分析树与抽象语法树 77 3.3.1 分析树 77 3.3.2 抽象语法树 79 3.4 二义性 83 3.4.1 二义性文法 83 3.4.2 优先权和结合性 85 3.4.3 悬挂else问题 87 3.4.4 无关紧要的二义性 89 3.5 扩展的表示法:EBNF和语法图 89 3.5.1 EBNF表示法 89 3.5.2 语法图 91 3.6 上下文无关语言的形式特性 93 3.6.1 上下文无关语言的形式定义 93 3.6.2 文法规则和等式 94 3.6.3 乔姆斯基层次和作为上下文无关 规则的语法局限 95 3.7 TINY语言的语法 97 3.7.1 TINY的上下文无关文法 97 3.7.2 TINY编译器的语法树结构 98 练习 101 注意与参考 104 第4章 自顶向下的分析 105 4.1 使用递归下降分析算法进行自顶向下 的分析 105 4.1.1 递归下降分析的基本方法 105 4.1.2 重复和选择:使用EBNF 107 4.1.3 其他决定问题 112 4.2 LL(1)分析 113 4.2.1 LL(1)分析的基本方法 113 4.2.2 LL(1)分析与算法 114 4.2.3 消除左递归和提取左因子 117 4.2.4 在LL(1)分析中构造语法树 124 4.3 First集合和Follow集合 125 4.3.1 First 集合 125 4.3.2 Follow 集合 130 4.3.3 构造LL(1)分析表 134 4.3.4 再向前:LL(k)分析程序 135 4.4 TINY语言的递归下降分析程序 136 4.5 自顶向下分析程序中的错误校正 137 4.5.1 在递归下降分析程序中的错误 校正 138 4.5.2 在LL(1)分析程序中的错误校正 140 4.5.3 在TINY分析程序中的错误校正 141 练习 143 编程练习 146 注意与参考 148 第5章 自底向上的分析 150 5.1 自底向上分析概览 151 5.2 LR(0)项的有穷自动机与LR(0)分析 153 5.2.1 LR(0)项 153 5.2.2 项目的有穷自动机 154 5.2.3 LR(0)分析算法 157 5.3 SLR(1)分析 160 5.3.1 SLR(1)分析算法 160 5.3.2 用于分析冲突的消除二义性 规则 163 5.3.3 SLR(1)分析能力的局限性
编译原理经典教材 目录 第一章引论 1.1什么叫编译程序 1.2编译过程概述 1.3编译程序的结构 1.3.1编译程序总框 1.3.2表格与表格管理 1.3.3出错处理 1.3.4遍 1.3.5编译前端与后端 1.4编译程序与程序设计环境 1.5编译程序的生成 第二章高级语言及其语法描述 2.1 程序语言的定义 2.1.1语法 2.1.2 语义 2.2 高级语言的一般特性 2.2.1 高级语言的分类 2.2.2程序结构 2.2.3数据类型与操作 2.2.4语句与控制结构 2.3程序语言的语法描述 2.3 上下文无关文法 2.3.2语法分析树与二义性 2.3.3 形式语言鸟瞰 练 习 第三章词法分析 3.1 对于词法分析器的要求 3.1.1词法分析器的功能和输出形式 3.1.2词法分析器作为一个独立子程序 3.2词法分析器的设计 3.2.1输入、预处理 3.2.2 单词符号的识别:超前搜索 3.2.3状态转换图 3.2.4状态转换图的实现 3.3正规表达式与有限自动机 3.3.1正规式与正规集 3.3.2确定有限自动机(DFA) 3.3.3非确定有限自动机(NFA) 3.3.4正规文法与有限自动机的等价性 3.3.5 正规式与有限自动机的等价性 3.3.6确定有限自动机的化简 3.4词法分析器的自动产生 3.4.1语言LEX的一般描述 3.4.2超前搜索 3.4.3 LEX的实现 练 习 第四章语法分析——自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.3.1左递归的消除 4.3.2消除回溯、提左因子 4.3.3 LL(1)分析条件 4.4递归下降分析程序构造 4.5预测分析程序 4.5.1预测分析程序工作过程 4.5.2预测分析表的构造 4.6 LL(1)分析中的错误处理 练 习 第五章语法分析——自下而上分析 5.1 自下而上分析基本问题 5.1.1 归约 5.1.2规范归约简述 5.1.3符号栈的使用与语法树的表示 5.2算符优先分析 5.2.1算符优先文法及优先表构造 5.2.2算符优先分析算法 5.2.3优先函数 5.2.4算符优先分析中的出错处理 5.3LR分析法 5.3.1 LR分析器 5.3.2LR(O)项目集族和LR(O)分析表的构造 5.3.3 SLR分析表的构造 5.3.4规范LR分析表的构造 5.3.5 LALR分析表的构造 5.3.6 二义文法的应用 5.3.7LR分析中的出错处理 5.4语法分析器的自动产生工具YACC 练 习 第六章属性文法和语法制导翻译 6.1属性文法 6.2基于属性文法的处理方法 6.2.1 依赖图 6.2.2树遍历的属性计算方法 6.2.3 一遍扫描的处理方法 6.2.4抽象语法树 6.3 S-属性文法的自下而上计算 6.4 L-属性文法和自顶向下翻译 6.4.1 翻译模式 6.4.2自顶向下翻译 6.4.3递归下降翻译器的设计 6.5自下而上计算继承属性 6.5.1 从翻译模式中去掉嵌入在产生式中间的动作 6.5.2分析栈中的继承属性 6.5.3模拟继承属性的计算 6.5.4 用综合属性代替继承属 练 习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值