图书介绍

编译器工程PDF|Epub|txt|kindle电子书版本网盘下载

编译器工程
  • (美)酷伯(Cooper,K.D.),(美)琳达特克森(Torczon,L.)著;冯速译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111179625
  • 出版时间:2006
  • 标注页数:492页
  • 文件大小:46MB
  • 文件页数:512页
  • 主题词:编译码器

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

编译器工程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

专家指导委员会对本书的赞誉1

译者序1

前言1

第1章 编译总览1

1.1 概述1

出版者的话1

1.2 为什么研究编译器构造法2

1.3 编译的基本原则2

1.4 编译器的结构3

1.5.1 理解输入5

1.5 翻译综述5

1.5.2 创建和维护运行时环境7

1.5.3 改进代码8

1.5.4 生成输出程序9

1.6 编译器应有的性质13

1.7 概括和展望14

本章注释15

第2章 扫描16

2.1 概述16

2.2 识别字17

2.2.1 识别器的形式18

2.2.2 识别更复杂的字19

2.2.3 扫描器的自动构建20

2.3 正则表达式21

2.3.1 正则表达式的定义22

2.3.2 例子23

2.3.3 RE的性质25

2.4 从正则表达式到扫描器以及从扫描器到正则表达式26

2.4.1 非确定性有穷自动机26

2.4.2 正则表达式到NFA:Thompson构造法28

2.4.3 NFA到DFA:子集构造法29

2.4.4 DFA到最小DFA:Hopcroft算法32

2.4.5 DFA到正则表达式34

2.4.6 将DFA作为识别器35

2.5 实现扫描器35

2.5.1 表驱动扫描器35

2.5.2 直接编码扫描器37

2.5.3 处理关键字37

2.5.4 描述动作38

2.6 高级话题38

本章注释41

2.7 概括和展望41

第3章 语法分析42

3.1 概述42

3.2 表示语法42

3.2.1 上下文无关文法43

3.2.2 构造句子45

3.2.3 使用结构描述优先权48

3.2.4 发现特定派生49

3.2.5 上下文无关文法与正则表达式的对比50

3.3 自顶向下分析51

3.3.1 例子52

3.3.2 自顶向下分析的复杂因素54

3.3.3 消除左递归54

3.3.4 消除回溯55

3.3.5 自顶向下递归下降分析器59

3.4 自底向上分析62

3.4.1 移入归约分析63

3.4.2 发现句柄65

3.4.3 LR(1)分析器67

3.5 构建LR(1)表格70

3.5.1 LR(1)项目71

3.5.2 构造规范集合72

3.5.3 填充表格74

3.5.4 表构造法的出错76

3.6 实践中的问题78

3.6.1 错误恢复79

3.6.2 一元操作符79

3.6.3 处理上下文相关歧义性80

3.6.4 左递归与右递归81

3.7 高级话题82

3.7.1 优化文法83

3.7.2 减小LR(1)表格的大小84

3.8 概括和展望86

本章注释87

第4章 上下文相关分析88

4.1 概述88

4.2 类型系统概述89

4.2.1 类型系统的目的89

4.2.2 类型系统的组成部分93

4.3 属性文法框架99

4.3.1 评估方法101

4.3.3 扩展例子102

4.3.2 循环性102

4.3.4 属性文法方法的问题107

4.4 特定语法制导翻译109

4.4.1 实现特定语法制导翻译110

4.4.2 例子111

4.5 高级话题117

4.5.1 类型推断中的较难问题117

4.5.2 更改结合性118

4.6 概括和展望119

本章注释120

5.2 分类法121

第5章 中间表示121

5.1 概述121

5.3 图示IR123

5.3.1 与语法相关的树123

5.3.2 图126

5.4 线性IR128

5.4.1 栈机器代码129

5.4.2 三地址代码129

5.4.3 表示线性代码130

5.5 静态单赋值形式131

5.6 把值映射到名字133

5.6.1 命名临时值134

5.6.2 内存模型135

5.7 符号表137

5.7.1 散列表138

5.7.2 构建符号表139

5.7.3 处理嵌套作用域139

5.7.4 符号表的多种运用142

5.8 概括和展望143

本章注释143

6.1 概述144

第6章 过程抽象144

6.2 控制抽象145

6.3 名字空间147

6.3.1 类Algol语言的名字空间147

6.3.2 活动记录150

6.3.3 面向对象语言的名字空间153

6.4 过程间的值传递158

6.4.1 参数传递158

6.4.2 返回值160

6.5.1 平凡基地址161

6.5 建立可寻址性161

6.5.2 其他过程的局部变量162

6.6 标准链接164

6.7 管理内存167

6.7.1 内存布局167

6.7.2 堆管理算法170

6.7.3 隐式释放172

6.8 概括和展望175

本章注释176

7.1 概述177

第7章 代码形态177

7.2 指定存储位置178

7.2.1 布局数据区178

7.2.2 把值保存在寄存器中179

7.2.3 机器特性180

7.3 算术操作符180

7.3.1 降低对寄存器的要求181

7.3.2 存取参数值183

7.3.6 作为操作符的赋值184

7.3.5 混合型表达式184

7.3.4 其他算术操作符184

7.3.3 表达式中的函数调用184

7.3.7 交换性、结合性以及数系185

7.4 布尔操作符和关系操作符185

7.4.1 表示186

7.4.2 关系操作的硬件支持189

7.4.3 选择表示191

7.5 存储和存取数组191

7.5.1 引用向量元素191

7.5.2 数组存储布局193

7.5.3 引用数组元素194

7.5.4 范围检测197

7.6 字符串197

7.6.1 串的表示198

7.6.2 串赋值198

7.6.3 串连接200

7.6.4 串长201

7.7 结构引用201

7.7.1 装入和存储匿名值201

7.7.2 理解结构布局202

7.7.3 结构数组203

7.8 控制流结构204

7.7.4 联合和运行时标签204

7.8.1 条件执行205

7.8.2 循环和迭代207

7.8.3 选择语句210

7.8.4 中断语句211

7.9 过程调用212

7.9.1 评估实参212

7.9.2 过程值参数213

7.9.3 保存和恢复寄存器213

7.10.1 单一类,无继承214

7.10 实现面向对象语言214

7.9.4 叶过程的优化214

7.10.2 单一继承216

7.11 概括和展望219

本章注释219

第8章 代码优化概述221

8.1 概述221

8.2 背景知识222

8.2.1 LINPACK的一个例子223

8.2.2 优化的各种考虑224

8.3 冗余表达式226

8.2.3 优化的机会226

8.3.1 构建有向无环图227

8.3.2 值编号229

8.3.3 冗余消除的经验232

8.4 优化作用域233

8.4.1 局部方法233

8.4.2 超局部方法233

8.4.3 区域方法234

8.5.1 超局部值编号235

8.5 比基本块大的区域上的值编号235

8.4.5 完整程序方法235

8.4.4 全局方法235

8.5.2 基于支配者的值编号238

8.6 全局冗余消除241

8.6.1 计算可用表达式242

8.6.2 取代冗余计算243

8.6.3 结合上述两个阶段244

8.7 高级话题245

8.7.1 通过复制增加上下文246

8.7.2 内联替换247

8.8 概括和展望248

本章注释249

第9章 数据流分析250

9.1 概述250

9.2 迭代数据流分析251

9.2.1 活变量251

9.2.2 迭代LIVEOUT解算器的性质256

9.2.3 数据流分析的局限性258

9.2.4 数据流分析的其他问题260

9.3 静态单一赋值形式262

9.3.2 支配263

9.3.1 构建SSA形式的简单方法263

9.3.3 放置φ函数267

9.3.4 重命名269

9.3.5 从SSA形式重新构造可执行代码273

9.4 高级话题277

9.4.1 结构数据流算法和可约性277

9.4.2 过程间分析279

9.5 概括和展望281

本章注释282

10.1 概述283

第10章 标量优化283

10.2 转换分类284

10.2.1 机器无关转换284

10.2.2 机器相关转换286

10.3 优化示例286

10.3.1 消除无用和不可达代码286

10.3.2 代码移动291

10.3.3 特化297

10.3.4 激活其他转换299

10.3.5 冗余消除301

10.4.1 优化组合302

10.4 高级话题302

10.4.2 强度减弱304

10.4.3 优化的其他目标311

10.4.4 优化序列的选择312

10.5 概括和展望312

本章注释313

第11章 指令筛选315

11.1 概述315

11.2 简单的树遍历方案318

11.3 通过树模式匹配实现指令筛选322

11.3.1 重写规则323

11.3.2 寻找铺盖326

11.3.3 工具328

11.4 指令筛选与窥孔优化329

11.4.1 窥孔优化329

11.4.2 窥孔转换器329

11.5 高级话题334

11.5.1 学习窥孔模式334

11.5.2 生成指令序列335

11.6 概括和展望336

本章注释336

12.1 概述338

第12章 指令调度338

12.2 指令调度问题339

12.2.1 调度质量的其他度量342

12.2.2 使调度困难的因素342

12.3 列表调度343

12.3.1 效率345

12.3.2 其他的优先度方案346

12.3.3 前向与向后列表调度346

12.3.4 使用列表调度的原因348

12.4.1 区域调度349

12.4 高级话题349

12.4.2 上下文的复制354

12.5 概括和展望356

本章注释356

第13章 寄存器分配357

13.1 概述357

13.2 背景问题357

13.2.1 内存与寄存器358

13.2.2 分配与赋值358

13.3 局部寄存器分配和赋值359

13.2.3 寄存器分类359

13.3.1 自顶向下的局部寄存器分配360

13.3.2 自底向上的局部寄存器分配360

13.4 移到超出单一块的范围363

13.4.1 活性和存活范围363

13.4.2 块边界处的复杂性364

13.5 全局寄存器分配和赋值365

13.5.1 发现全局存活范围366

13.5.2 评估全局溢出代价367

13.5.3 冲突和冲突图368

13.5.4 自顶向下着色370

13.5.5 自底向上着色371

13.5.6 接合存活范围以降低度372

13.5.7 回顾与比较373

13.5.8 在冲突图中编码机器限制374

13.6 高级话题375

13.6.1 图着色分配的若干变形375

13.6.2 寄存器分配中较困难的问题377

13.7 概括和展望379

本章注释379

A.1 概述380

附录A ILOC380

A.2 命名约定381

A.3 各种操作382

A.3.1 算术382

A.3.2 移位382

A.3.3 内存操作383

A.3.4 寄存器到寄存器的拷贝操作383

A.4 例子384

A.5 控制流操作384

A.5.1 其他比较和分支语法385

A.6 SSA形式的表示386

A.5.2 跳转386

附录B 数据结构389

B.1 概述389

B.2 表示集合389

B.2.1 把集合表示成有序表390

B.2.2 把集合表示成位向量391

B.2.3 表示稀疏集合391

B.3 实现中间表示392

B.3.1 图式中间表示392

B.3.2 线性中间形式395

B.4 实现散列表396

B.4.1 选择散列函数397

B.4.2 开放散列398

B.4.3 开放寻址399

B.4.4 存储符号记录400

B.4.5 增加嵌套词法作用域401

B.5 一个灵活的符号表设计403

附录注释404

参考文献405

练习424

索引452

热门推荐