注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计汇编语言/编译原理现代编译器的Java实现(第2版)

现代编译器的Java实现(第2版)

现代编译器的Java实现(第2版)

定 价:¥35.00

作 者: (美)Andrew W.Appel等著;陈明等译;陈明译
出版社: 电子工业出版社
丛编项: 国外计算机科学教材系列
标 签: Java

ISBN: 9787121002700 出版时间: 2004-09-01 包装: 平装
开本: 26cm 页数: 350 字数:  

内容简介

  本书是一本编译技术的教程,其特点是注重实现。从学习编译器的结构来掌握理论,并通过编程技术将编译理论融合于实践中。本书主要内容分为两部分,第一部分为编译基础(第1章至第12章),主要包括:词法分析、语法分析、抽象语法、语义分析、活动记录、翻译成中间代码、基本块和轨迹、指令选择、活性分析、寄存器分配、 使之成为整体。第二部分为高级课题(第13章至第21章),主要包括:无用信息收集、面向对象语言、函数式编程语言、多态类型、数据流分析、循环优化、静态单赋值表、流水线和调度、分级存储器体系等。本书可作为高等院校编译技术课程的教材、教师参考书以及编译技术研究人员的参考资料。

作者简介

  Andrew W.Appel,普林斯顿大学计算机科学系教授,从事关于编译器、函数式编程语言、运行时间系统和无用信息收集、类型系统、计算机安全等方面的研究,并发表了多篇相关的论文;他还是“Compiling with Continuayions”一书的作者,以及New Jersey项目ML标准的奠基者和设计者。由于“在编程语言和编译器领域的重大研究贡献”,以及他为ACM会刊“ACM Transactions on Programming Languages and Systems”所做的工作,1998年,Appel被选为ACM的会士。陈明,石油大学(北京)计算机科学与技术系系主任、教授、博士生导师,南开大学、保肥工业大学等院校兼职教授。

图书目录

第一部分 编译基础
第1章 概述
1.1 模块及接口
1.1.1 阶段的描述
1.2 工具和软件
1.3 树型语言的数据结构
程序设计:直线程序解释器
习题
第2章 词法分析
2.1 词法记号
2.2 正则表达式
2.3 有限自动机
2.3.1 识别最长的匹配
2.4 非确定有限自动机
2.4.1 正规文法转换为NFA
2.4.2 NFA转换为DFA
2.5 词法分析生成器
2.5.1 JAVACC
2.5.2 SableCC
程序设计:词法分析
进一步阅读
习题
第3章 语法分析
3.1 上下文无关文法
3.1.1 推导
3.1.2 分析树
3.1.3 二义性文法
3.1.4 文件结束符
3.2 预测分析
3.2.1 FIRST和FOLLOW集
3.2.2 构造一个预测分析器
3.2.3 消除左递归
3.2.4 左因子
3.2.5 出错恢复
3.3 LR分析
3.3.1 LR分析器
3.3.2 LR(0)分析器生成器
3.3.3 SLR分析器生成器
3.3.4 LR(1)项目和LR(1)分析表
3.3.5 LALR(1)分析表
3.3.6 文法类型的层次结构
3.3.7 二义性文法的LR分析
3.4 使用分析器生成器
3.4.1 JAVACC
3.4.2 SableCC
3.4.3 算符优先分析法
3.4.4 语法和语义
3.5 出错恢复
3.5.1 用error符号恢复
3.5.2 全局出错修复
程序设计:实现分析器
进一步阅读
习题
第4章 抽象语法
4.1 语义分析
4.1.1递归下降
4.1.2 自动生成分析器
4.2 抽象分析树
4.2.1位置
4.3 访问者
4.3.1 MiniJava的抽象语法
程序设计:抽象语法
进一步阅读
习题
第5章 语义分析
5.1 符号表
5.1.1 多重符号表
5.1.2 高效率的命令符号表
5.1.3 高效率的功能符号表
5.1.4 符号
5.2 MiniJava的类型检查
5.2.1 错误处理
程序设计:类型检查
习题
第6章 活动纪录
6.1 堆栈帧
6.1.1 帧指针
6.1.2 寄存器
6.1.3 参数传递
6.1.4 返回地址
6.1.5 常驻帧变量
6.1.6 静态连接
6.2 MiniJava语言编译器中的帧
6.2.1 帧的表示
6.2.2 局部变量
6.2.3 临时(局部)变量和标号
6.2.4 静态连接的管理
程序设计:帧
进一步阅读
习题
第7章 翻译成中间代码
7.1 中间树
7.2 树的翻译
7.2.1 表达式的类型
7.2.2 简单变量
7.2.3 数组变量
7.2.4 结构化的L-值
7.2.5 下标和域选择
7.2.6 关于安全性
7.2.7 算术运算
7.2.8 条件
7.2.9 字符串
7.2.10 记录和数组的创建
7.2.11 while循环
7.2.12 for循环
7.2.13 函数调用
7.2.14 静态连接
7.3 声明
7.3.1 变量定义
7.3.2 函数定义
7.3.3 段
7.3.4 类和对象
程序设计:翻译为树
习题
第8章 基本块和轨迹
8.1 规范树
8.1.1 ESEO的翻译
8.1.2 常用重写规则
8.1.3 将CALL移至顶部
8.1.4 语句的线性表
8.2 时间条件分支
8.2.1 基本块
8.2.2 轨迹
8.2.3 完成
8.2.4 最佳轨迹
进一步阅读
习题
第9章指令选择
9.1指令选择的算法
9.1.1 maximal munch算法
9.1.2 动态编程
9.1.3 树的文法规则
9.1.4 快速匹配
9.1.5表示算法的效率
9.2 CISC机
9.3 MiniJava编译器中的指令选择
9.3.1 抽象的汇编语言指令
9.3.2 生成汇编指令
9.3.3 过程调用
9.3.4 如果不存在帧指针
程序设计:指令选择
进一步阅读
习题
第10章 活性分析
10.1 数据流的解
10.1.1 活性的计算
10.1.2 集合的表示
10.1.3 时间复杂度
10.1.4 最少的确定点
10.1.5 静态与动态活性
10.1.6 干扰图
10.2 MiniJava编译器中的活性分析
10.2.1 图
10.2.2 控制流图
10.2.3 活性分析
程序设计:构造流图
程序设计:活性
习题
第11章 寄存器分配
11.1 简化着色
11.1.1 举例
11.2结合
11.2.1 溢出
11.3 预着色节点
11.3.1 机器寄存器临时变量的复制
11.3.2 调用保存寄存器和被调用保存寄存器
11.3.3 预着色节点的例子
11.4 图着色实现
11.4.1 数据结构
11.4.2 不变量
11.4.3 程序代码
11.5 树的寄存器分配
程序设计:图着色
进一步阅读
习题
第12章 使之成为整体
程序设计进入/退出过程
程序设计:使程序运行
第二部分 高级课题
第13章 无用信息收集
13.1 标记一清除收集机制
13.2 引用计数
13.3 复制收集
13.4 世代收集
13.5 增量收集
13.6 Baker算法
13.7 编译器接口
13.7.1 快速分配
13.7.2 数据分布描述
13.7.3 派生指针
程序设计:描述符
程序设计:无用信息收集
进一步阅读
习题
第14章 面向对象语言
14.1 类扩展
14.2 数据字段的单继承
14.2.1 方法
14.3 多继承
14.4 类成员测试
14.5 私有字段成员和方法
14.6 无类语言
14.7 优化面向对象程序
程序设计:带类扩展的MiniJava
进一步阅读
习题
第15章 函数式编程语言
15.1 一种简单的函数式语言
15.2 闭包
15.2.1 堆分配激活记录
15.3 恒变量
15.3.1 基于连续的I/O
15.3.2 语言变换
15.3.3 纯函数式语言的优化
15.4 内部扩展
15.5 闭包转换
15.6 有效尾部递归
15.7 惰性评估
15.7.1 按名调用评估
15.7.2 按需调用
15.7.3 一个惰性程序的计算
15.7.4 推高不变量
15.7.5 惰性函数式程序的优化
15.7.6 严格性分析
进一步阅读
程序设计:编译函数式语言
习题
第16章 多态类型
16.1 参数多态
16.2 多态类型检查
16.3 多态程序的翻译
16.3.1 指针、整型和包装
16.4 静态重载的解决方法
进一步阅读
习题
第17章 数据流分析
17.1 流分析的中间表示
17.1.1 四元组
17.2 多种的数据流分析
17.2.1 到达定义
17.2.2 可用表达式
17.2.3 到达表达式
17.2.4 活性分析
17.3 使用数据流分析的变换
17.3.1 公用子表达式消除
17.3.2 常量传播
17.3.3 复制传播
17.3.4 死代码消除
17.4 加快数据流分析
17.4.1 位向量
17.4.2 基本块
17.4.3 节点排序
17.4.4 use-def和def-use链
17.4.5 work-list算法
17.4.6 增量式数据流分析
17.5 别名分析
17.5.1 基于类型的别名分析
17.5.2 基于流的别名分析
17.5.3 使用may-alias信息
17.5.4 严格纯函数式语言中的别名分析
进一步阅读
习题
第18章 循环优化
18.1 必经节点
18.1.1 寻找必经节点的算法
18.1.2 直接必经节点
18.1.3 循环
18.1.4 循环前置首部
18.2 循环不变量的计算
18.2.1 提升
18.3 归纳变量
18.3.1 归纳变量检查
18.3.2 强度削减
18.3.3 消除
18.3.4 重写比较
18.4 数组边界检查
18.5 循环展开
进一步阅读
习题
第19章 静态单赋值表
19.1 转化为SSA表
19.1.1 插入∮-function的准则
19.1.2 必经前端
19.1.3 插入∮-function
19.1.4 变量重命名
19.1.5 边分离
19.2 必经节点树的有效计算
19.2.1 深度优先生成(spanning)树
19.2.2 半必经节点
19.2.3 Lengauer-Tarjan算法
19.3 采用SSA优化算法
19.3.1 消除死代码
19.3.2 简单常量传播
19.3.3 条件常量复制
19.3.4 保存必经性质
19.4 数组,指针和存储
19.4.1 存储相关
19.5 控制相关图
19.5.1 积极的死代码消除
19.6 从SSA表后的转换
19.6.1 关于SSA的活性的分析
19.7 函数式中介表
进一步阅读
习题
第20章 流水线和调度
20.1 不受资源限制的循环调度
20.2 资源限制循环流水线
20.2.1 模调度
20.2.2 发现最小启动间隔
20.2.3 其他控制流
20.2.4 编译器应该调度指令吗
20.3 分支预测
20.3.1 静态转移预测
20.3.2 编译器应该预测分支转移吗?
进一步阅读
习题
第21章 分级存储器体系
21.1 高速缓冲存储器结构
21.2 cache块的排列
21.2.1 指令cache的对齐
21.3 预取指令
21.4 循环交换
21.5 分块
21.6 无用信息收集和分级存储器体系
进一步阅读
习题
附录 MiniJava语言参考手册
参考文献

本目录推荐