图书介绍

编译原理 第3版PDF|Epub|txt|kindle电子书版本网盘下载

编译原理 第3版
  • 陈意云,张昱编著 著
  • 出版社: 北京:高等教育出版社
  • ISBN:9787040404913
  • 出版时间:2014
  • 标注页数:441页
  • 文件大小:80MB
  • 文件页数:455页
  • 主题词:编译程序-程序设计-高等学校-教材

PDF下载


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

下载说明

编译原理 第3版PDF格式电子书版下载

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

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

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

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

图书目录

第1章 引论1

1.1 编译器概述1

1.1.1 词法分析1

1.1.2 语法分析3

1.1.3 语义分析3

1.1.4 中间代码生成4

1.1.5 代码优化4

1.1.6 代码生成5

1.1.7 符号表管理5

1.1.8 阶段的分组6

1.1.9 解释器7

1.2 编译器技术的应用7

1.2.1 高级语言的实现8

1.2.2 针对计算机体系结构的优化9

1.2.3 新计算机体系结构的设计10

1.2.4 程序翻译10

1.2.5 提高软件开发效率的工具11

习题112

第2章 词法分析13

2.1 词法记号及属性13

2.1.1 词法记号、模式、词法单元14

2.1.2 词法记号的属性15

2.1.3 词法错误16

2.2 词法记号的描述与识别16

2.2.1 串和语言16

2.2.2 正规式18

2.2.3 正规定义19

2.2.4 状态转换图20

2.3 有限自动机23

2.3.1 不确定的有限自动机24

2.3.2 确定的有限自动机25

2.3.3 NFA到DFA的变换26

2.3.4 DFA的化简29

2.4 从正规式到有限自动机31

2.5 词法分析器的生成器34

习题237

第3章 语法分析40

3.1 上下文无关文法40

3.1.1 上下文无关文法的定义41

3.1.2 推导42

3.1.3 分析树43

3.1.4 二义性44

3.2 语言和文法45

3.2.1 正规式和上下文无关文法的比较45

3.2.2 分离词法分析器的理由46

3.2.3 验证文法产生的语言46

3.2.4 适当的表达式文法47

3.2.5 消除二义性48

3.2.6 消除左递归49

3.2.7 提左因子50

3.2.8 非上下文无关的语言构造51

3.2.9 形式语言鸟瞰52

3.3 自上而下分析54

3.3.1 自上而下分析的一般方法54

3.3.2 LL(1)文法55

3.3.3 递归下降的预测分析56

3.3.4 非递归的预测分析57

3.3.5 构造预测分析表60

3.3.6 预测分析的错误恢复61

3.4 自下而上分析65

3.4.1 归约65

3.4.2 句柄65

3.4.3 用栈实现移进-归约分析66

3.4.4 移进-归约分析的冲突68

3.5 LR分析器69

3.5.1 LR分析算法69

3.5.2 LR文法和LR分析方法的特点73

3.5.3 构造SLR分析表74

3.5.4 构造规范的LR分析表81

3.5.5 构造LALR分析表85

3.5.6 非二义且非LR的上下文无关文法88

3.6 二义文法的应用89

3.6.1 使用算符的优先级和结合性来解决冲突90

3.6.2 使用其他约定来解决冲突92

3.6.3 LR分析的错误恢复93

3.7 语法分析器的生成器95

3.7.1 分析器的生成器Yacc95

3.7.2 用Yacc处理二义文法98

3.7.3 Yacc的错误恢复101

习题3103

第4章 语法制导的翻译109

4.1 语法制导的定义109

4.1.1 语法制导定义的形式110

4.1.2 综合属性111

4.1.3 继承属性111

4.1.4 属性依赖图112

4.1.5 属性计算次序113

4.2 S属性定义的自下而上计算114

4.2.1 语法树115

4.2.2 构造语法树的语法制导定义115

4.2.3 S属性的自下而上计算117

4.3 L属性定义的自上而下计算119

4.3.1 L属性定义120

4.3.2 翻译方案120

4.3.3 预测翻译器的设计124

4.3.4 用综合属性代替继承属性126

4.4 L属性的自下而上计算126

4.4.1 删除翻译方案中嵌入的动作127

4.4.2 分析栈上的继承属性127

4.4.3 模拟继承属性的计算130

习题4132

第5章 类型检查135

5.1 类型在编程语言中的作用135

5.1.1 执行错误和安全语言136

5.1.2 类型化语言和类型系统136

5.1.3 类型化语言的优点139

5.2 类型系统的描述语言139

5.2.1 定型断言140

5.2.2 定型规则141

5.2.3 类型检查和类型推断142

5.3 一个简单类型检查器的规范143

5.3.1 一个简单的语言143

5.3.2 类型系统143

5.3.3 类型检查145

5.3.4 类型转换147

5.4 多态函数148

5.4.1 为什么要使用多态函数148

5.4.2 类型变量149

5.4.3 一个含多态函数的语言151

5.4.4 代换、实例与合一153

5.4.5 多态函数的类型检查154

5.5 类型表达式的等价158

5.5.1 类型表达式的结构等价158

5.5.2 类型表达式的名字等价159

5.5.3 记录类型160

5.5.4 类型表示中的环161

5.6 函数和算符的重载162

5.6.1 子表达式的可能类型集合162

5.6.2 缩小可能类型的集合163

习题5164

第6章 运行时存储空间的组织和管理171

6.1 局部存储分配172

6.1.1 过程172

6.1.2 名字的作用域和绑定172

6.1.3 活动记录174

6.1.4 局部数据的布局175

6.1.5 程序块175

6.2 全局栈式存储分配177

6.2.1 运行时内存的划分177

6.2.2 活动树和运行栈178

6.2.3 调用序列180

6.2.4 栈上可变长度数据183

6.2.5 悬空引用183

6.3 非局部名字的访问184

6.3.1 无过程嵌套的静态作用域185

6.3.2 有过程嵌套的静态作用域185

6.3.3 动态作用域189

6.4 参数传递190

6.4.1 值调用190

6.4.2 引用调用191

6.4.3 换名调用191

6.5 堆管理192

6.5.1 内存管理器192

6.5.2 计算机内存分层193

6.5.3 程序局部性195

6.5.4 手工回收请求195

习题6196

第7章 中间代码生成212

7.1 中间语言213

7.1.1 后缀表示213

7.1.2 图形表示213

7.1.3 三地址代码214

7.1.4 静态单赋值形式216

7.2 声明语句217

7.2.1 过程中的声明217

7.2.2 作用域信息的保存218

7.2.3 记录的域名220

7.3 赋值语句221

7.3.1 符号表中的名字221

7.3.2 数组元素的地址计算222

7.3.3 数组元素地址计算的翻译方案223

7.3.4 类型转换225

7.4 布尔表达式和控制流语句226

7.4.1 布尔表达式227

7.4.2 控制流语句的翻译227

7.4.3 布尔表达式的控制流翻译229

7.4.4 开关语句的翻译231

7.4.5 过程调用的翻译233

习题7234

第8章 代码生成241

8.1 代码生成器设计中的问题241

8.1.1 目标程序241

8.1.2 指令选择242

8.1.3 寄存器分配243

8.1.4 计算次序选择243

8.2 目标语言244

8.2.1 目标机器的指令集244

8.2.2 指令代价245

8.3 基本块和流图247

8.3.1 基本块248

8.3.2 基本块的优化249

8.3.3 流图250

8.3.4 下次引用信息251

8.4 一个简单的代码生成器252

8.4.1 寄存器描述和地址描述252

8.4.2 代码生成算法253

8.4.3 寄存器选择函数254

8.4.4 为变址和指针语句产生代码255

8.4.5 条件语句256

习题8257

第9章 独立于机器的优化267

9.1 优化的主要种类267

9.1.1 优化的主要源头268

9.1.2 一个实例268

9.1.3 公共子表达式删除270

9.1.4 复写传播272

9.1.5 死代码删除273

9.1.6 代码外提274

9.1.7 强度削弱和归纳变量删除274

9.2 数据流分析介绍276

9.2.1 数据流抽象277

9.2.2 数据流分析模式278

9.2.3 到达-定值279

9.2.4 活跃变量284

9.2.5 可用表达式285

9.2.6 小结287

9.3 数据流分析的基础288

9.3.1 半格289

9.3.2 迁移函数291

9.3.3 一般框架的迭代算法293

9.3.4 数据流解的含义295

9.4 常量传播297

9.4.1 常量传播框架的数据流值297

9.4.2 常量传播框架的迁移函数298

9.4.3 常量传播框架的单调性298

9.4.4 常量传播框架的非分配性299

9.4.5 结果的解释300

9.5 部分冗余删除301

9.5.1 冗余的根源301

9.5.2 能否删除所有的冗余303

9.5.3 惰性代码移动问题304

9.5.4 预期表达式305

9.5.5 惰性代码移动算法305

9.6 流图中的循环310

9.6.1 支配结点311

9.6.2 回边和可归约性312

9.6.3 流图的深度314

9.6.4 自然循环314

9.6.5 迭代流图算法的收敛速度315

习题9317

第10章 依赖于机器的优化329

10.1 处理器体系结构330

10.1.1 指令流水线和分支延迟330

10.1.2 流水化的执行331

10.1.3 多指令发射331

10.2 代码调度的约束332

10.2.1 数据相关332

10.2.2 发现内存访问中的相关性333

10.2.3 寄存器使用和并行执行之间的折中334

10.2.4 寄存器分配和代码调度的次序安排335

10.2.5 控制相关336

10.2.6 投机执行的支持336

10.2.7 一个基本的机器模型337

10.3 基本块调度338

10.3.1 数据依赖图338

10.3.2 基本块的表调度340

10.3.3 区分优先级的拓扑次序341

10.4 全局代码调度341

10.4.1 简单的代码移动342

10.4.2 向上的代码移动343

10.4.3 向下的代码移动344

10.4.4 更新数据相关345

10.4.5 全局调度的其他问题345

10.4.6 静态调度器和动态调度器的相互影响346

10.5 软件流水346

10.5.1 引言347

10.5.2 循环的软件流水348

10.5.3 寄存器分配和代码生成350

10.5.4 Do-Across循环351

10.5.5 软件流水的目标和约束352

10.5.6 软件流水算法354

10.5.7 无环数据依赖图的调度355

10.6 并行性和数据局部性优化概述356

10.6.1 多处理器357

10.6.2 应用中的并行性358

10.6.3 循环级并行359

10.6.4 数据局部性360

10.6.5 矩阵乘法算法362

10.6.6 矩阵乘法算法的优化364

习题10365

第11章 编译系统和运行时系统369

11.1 C语言的编译系统369

11.1.1 预处理器370

11.1.2 汇编器371

11.1.3 连接器371

11.1.4 目标文件的格式373

11.1.5 符号解析375

11.1.6 静态库376

11.1.7 可执行目标文件及装入378

11.1.8 动态连接379

11.1.9 处理目标文件的一些工具381

11.2 Java语言的运行时系统381

11.2.1 Java虚拟机语言简介382

11.2.2 Java虚拟机382

11.2.3 即时编译器384

11.3 无用单元收集386

11.3.1 标记和清扫386

11.3.2 引用计数388

11.3.3 复制收集388

11.3.4 分代收集390

11.3.5 渐增式收集391

11.3.6 编译器与收集器之间的相互影响391

习题11394

第12章 面向对象语言的编译399

12.1 面向对象语言的概念399

12.1.1 对象和对象类399

12.1.2 继承400

12.1.3 信息封装402

12.2 方法的编译402

12.3 继承的编译方案405

12.3.1 单一继承的编译方案406

12.3.2 多重继承的编译方案408

习题12412

第13章 函数式语言的编译415

13.1 函数式编程语言简介415

13.1.1 语言构造415

13.1.2 参数传递机制417

13.1.3 变量的自由出现和约束出现418

13.2 函数式语言的编译简介419

13.2.1 几个受启发的例子420

13.2.2 编译函数422

13.2.3 环境与约束422

13.3 抽象机的体系结构423

13.3.1 抽象机的栈424

13.3.2 抽象机的堆425

13.3.3 名字的寻址426

13.3.4 约束的建立427

13.4 指令集和编译428

13.4.1 表达式428

13.4.2 变量的引用性出现430

13.4.3 函数定义431

13.4.4 函数应用432

13.4.5 构造和计算闭包436

13.4.6 letrec表达式和局部变量437

习题13439

参考文献441

热门推荐