图书介绍

编译程序设计艺术 理论与实践【2025|PDF下载-Epub版本|mobi电子书|kindle百度云盘下载】

编译程序设计艺术 理论与实践
  • (美)皮特曼,皮特斯编著 著
  • 出版社: 北京:机械工业出版社
  • ISBN:9787111288107
  • 出版时间:2010
  • 标注页数:341页
  • 文件大小:24MB
  • 文件页数:354页
  • 主题词:编译程序-程序设计

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.2 语言与翻译程序1

1.3 文法的作用2

1.4 若干例子4

1.5 编译程序的结构6

1.5.1 词法分析7

1.5.2 字符串表8

1.5.3 语法分析9

1.5.4 约束9

1.5.5 符号表9

1.5.6 代码生成9

1.5.7 优化10

符号11

缩略词11

关键术语11

练习12

复习小测验12

编译程序实验项目13

进一步阅读13

第2章 文法:乔姆斯基层次14

2.1 简介14

2.2 文法14

2.2.1 字母表与串14

2.2.2 非终结符与产生式15

2.2.3 若干文法例子15

2.3 乔姆斯基层次18

2.4 文法及其机器19

2.4.1 图灵机19

2.4.2 线性有界自动机20

2.4.3 下推自动机20

2.4.4 删除空产生式21

2.4.5 比较上下文无关文法和上下文敏感文法22

2.4.6 有穷状态自动机22

2.5 空串与空语言23

2.6 规范推导23

2.7 二义性24

2.8 文法思维的艺术25

2.8.1 有穷状态自动机的局限性26

2.8.2 上下文无关文法的计数27

2.8.3 对上下文敏感29

小结30

符号31

缩略词31

关键术语31

练习32

复习小测验34

编译程序实验项目35

进一步阅读35

第3章 扫描程序和正则语言37

3.1 词法分析简介37

3.2 正则表达式37

3.2.1 正则表达式代数39

3.2.2 正则表达式的形式化特性40

3.3 文法与正则表达式的转换41

3.4 有穷状态自动机44

3.5 不确定的有穷状态自动机45

3.6 将文法转换为自动机46

3.7 自动机的转换48

3.7.1 删除空环路49

3.7.2 删除空变迁50

3.7.3 自动机的确定化51

3.7.4 自动机的约简52

3.8 将自动机转换为文法53

3.9 左线性文法54

3.10 在计算机上实现有穷状态自动机54

3.11 扫描程序的特殊实现问题59

3.11.1 输入字母表的大小59

3.11.2 扫描程序自动机中的停机状态60

3.11.3 过滤空格与注释60

3.11.4 单词的输出61

3.12 字符串表的实现62

3.12.1 基于线性查找的实现63

3.12.2 基于散列表的实现64

3.12.3 基于查找树的实现66

3.12.4 不同实现的性能比较69

3.13 保留字69

3.14 使用扫描程序生成工具70

小结70

符号71

缩略词71

关键术语71

练习72

复习小测验74

编译程序实验项目74

进一步阅读75

第4章 分析程序和上下文无关语言76

4.1 简介76

4.2 下推自动机76

4.2.1 停机条件的等价性78

4.2.2 根据上下文无关文法构造下推自动机79

4.3 LL(k)条件81

4.3.1 First和Follow集82

4.3.2 选择集83

4.4 左递归85

4.5 公共左因子86

4.6 为上下文无关文法扩展正则表达式运算符88

4.7 使用分析程序生成工具89

4.7.1 使用TAG编译程序90

4.7.2 使用YACC92

4.8 递归下降分析程序92

4.9 递归下降分析程序作为下推自动机95

小结95

缩略词96

关键术语96

练习97

复习小测验101

编译程序实验项目101

进一步阅读102

第5章 语义分析与属性文法103

5.1 简介103

5.2 属性文法103

5.2.1 继承属性和综合属性104

5.2.2 属性值流107

5.3 非终结符作为属性求值函数108

5.4 符号表作为属性109

5.5 Micro-Modula的属性文法110

5.6 在TAG编译程序中使用属性113

5.7 作用域与标识符类别114

5.7.1 标识符作用域的文法114

5.7.2 标识符作用域例子分析116

5.7.3 符号表的其他问题120

5.8 在递归下降中实现属性121

5.9 实现符号表122

小结123

符号123

关键术语123

练习124

复习小测验126

编译程序实验项目126

进一步阅读126

第6章 语法制导代码生成128

6.1 简介128

6.2 计算机硬件体系结构128

6.3 栈机器的表达式求值130

6.4 Itty Bitty栈机器131

6.5 带属性的代码生成134

6.5.1 运算符优先级与结合性质137

6.5.2 程序结构的语义138

6.5.3 向前分支问题139

6.6 过程和函数的代码生成143

6.7 块结构的栈帧管理144

6.7.1 帧与帧指针144

6.7.2 静态链与动态链145

6.7.3 帧指针的Display向量146

6.8 其他数据类型148

6.9 结构化数据类型149

6.9.1 指针类型150

6.9.2 记录结构151

6.9.3 数组的语义151

6.10 其他数据结构153

6.11 Itty Bitty栈机器的输入和输出154

6.12 语法制导语义的局限154

6.13 手工编写编译程序的代码生成155

6.14 语法制导语义的应用155

6.14.1 Tiny BASIC解释程序155

6.14.2 Micro-Modula美化打印工具156

小结158

关键术语158

练习159

复习小测验160

编译程序实验项目160

进一步阅读160

第7章 自底向上分析程序的自动化设计162

7.1 简介162

7.2 LR(k)分析程序165

7.2.1 构造LR(k)状态机166

7.2.2 一个LR(2)分析程序168

7.2.3 归约与移进操作168

7.3 冲突169

7.4 例子:文法G2的冲突解析169

7.5 在栈中保存状态171

7.6 其他LR(k)分析程序:SLR172

7.7 LALR(k)分析程序174

7.8 自底向上分析程序的实现175

7.9 出错恢复177

7.10 LR分析程序中的属性求值177

小结178

关键术语179

练习180

复习小测验180

编译程序实验项目181

进一步阅读181

第8章 变换属性文法182

8.1 简介182

8.2 程序的树表示182

8.3 树变换文法183

8.3.1 非生成的文法186

8.3.2 一个TAG例子187

8.3.3 求值次序188

8.3.4 信息流与存储188

8.3.5 带树值的属性189

8.3.6 不确定的分析191

8.4 组合串文法与树文法191

8.5 TAG中的类型检查192

8.6 基于变换的代码优化193

8.6.1 数据流分析193

8.6.2 数据流分析中使用属性文法197

8.7 中间代码树表示的替代方案198

8.7.1 四元式的数据流199

8.7.2 循环的数据流分析200

8.8 实用优化变换综述203

8.8.1 模拟执行优化的类别204

8.8.2 常量折叠分析204

8.8.3 使用值编号检测公共子表达式208

8.8.4 左移动提升211

8.8.5 右移动提升212

8.8.6 无用代码以及其他从右到左的数据流分析216

8.8.7 数学等式与代码选择216

8.8.8 循环结构分析217

8.9 实现抽象语法树220

8.10 实现TAG驱动的树变换228

小结231

符号232

缩略词232

关键术语232

练习233

复习小测验234

编译程序实验项目234

进一步阅读234

第9章 代码生成与优化237

9.1 简介237

9.2 循环优化237

9.2.1 循环的范围分析238

9.2.2 归纳变量239

9.2.3 循环展开240

9.3 寄存器与内存分配241

9.3.1 寄存器分配算法242

9.3.2 表达式中的寄存器分配243

9.3.3 更好的寄存器分配数据流分析257

9.3.4 循环的寄存器分配257

9.3.5 寻址模式258

9.3.6 分支寻址选择259

9.3.7 分支链264

9.4 代码生成的复杂性265

9.4.1 指令选择266

9.4.2 强度削弱268

9.5 专用指令269

9.5.1 RISC和流水线处理器调度269

9.5.2 向量处理器272

9.6 代码优化的变形276

9.6.1 代码优化的分类276

9.6.2 窥孔优化277

小结277

缩略词277

关键术语278

练习278

复习小测验279

编译程序实验项目279

进一步阅读279

第10章 非过程式语言281

10.1 简介281

10.2 应用式语言的编译282

10.2.1 Lisp语言的一些概念283

10.2.2 尾递归284

10.2.3 实现一个应用式语言的编译程序285

10.3 变换属性文法的编译程序293

10.3.1 TAG编译程序的组成部分293

10.3.2 文法中的迭代运算符294

10.3.3 向用户报告语法错误295

10.3.4 自动构造扫描程序296

10.3.5 TAG编译程序的语法分析300

10.3.6 树变换305

10.3.7 语法错误停机307

小结307

关键术语308

练习308

复习小测验309

进一步阅读309

附录A Itty Bitty Modula语法图311

附录B TAG编译程序的TAG313

附录C Itty Bitty栈机器的指令集335

附录D 四种计算机的代码生成表339

热门推荐