图书介绍

现代编译器的Java实现 第2版PDF|Epub|txt|kindle电子书版本网盘下载

现代编译器的Java实现 第2版
  • (美)Andrew W.Appel等著;陈明等译 著
  • 出版社: 北京:电子工业出版社
  • ISBN:7121002701
  • 出版时间:2004
  • 标注页数:350页
  • 文件大小:18MB
  • 文件页数:368页
  • 主题词:Java

PDF下载


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

下载说明

现代编译器的Java实现 第2版PDF格式电子书版下载

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

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

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

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

图书目录

1.1模块及接口1

3.4.4语法和语义 51

目 录1

第一部分编译基础1

第1章 概述1

1.1.1阶段的描述2

1.2工具和软件3

1.3树型语言的数据结构3

程序设计:直线程序解释器6

习题8

第2章词法分析9

2.1词法记号9

2.2正则表达式10

2.3有限自动机12

2.3.1识别最长的匹配14

2.4非确定有限自动机14

2.4.1正规文法转换为NFA15

2.4.2 NFA转换为DFA16

2.5词法分析生成器19

2.5.1 JAVACC19

程序设计:词法分析20

2.5.2 SableCC20

进一步阅读21

习题21

第3章语法分析24

3.1上下文无关文法25

3.1.1推导26

3.1.2分析树27

3.1.3二义性文法27

3.1.4文件结束符29

3.2预测分析29

3.2.1 FIRST和FOLLOW集30

3.2.3消除左递归33

3.2.2构造一个预测分析器33

3.2.4左因子35

3.2.5 出错恢复35

3.3 LR分析36

3.3.1 LR分析器38

3.3.2 LR(0)分析器生成器38

3.3.3 SLR分析器生成器41

3.3.4 LR(1)项目和LR(1)分析表42

3.3.5 LALR(1)分析表44

3.3.6文法类型的层次结构44

3.4使用分析器生成器45

3.3.7二义性文法的LR分析45

3.4.1 JAVACC46

3.4.2 SableCC47

3.4.3算符优先分析法49

3.5出错恢复52

3.5.1用error符号恢复52

3.5.2全局出错修复53

习题55

程序设计:实现分析器55

进一步阅读55

第4章抽象语法59

4.1语义分析59

4.1.1递归下降59

4.1.2自动生成分析器60

4.2抽象分析树61

4.2.1位置64

4.3访问者64

4.3.1 MiniJava的抽象语法67

程序设计:抽象语法70

进一步阅读70

习题70

第5章语义分析71

5.1符号表71

5.1.1多重符号表72

5.1.2高效率的命令符号表73

5.1.3高效率的功能符号表74

5.1.4符号75

5.2 MiniJava的类型检查77

5.2.1错误处理79

程序设计:类型检查79

习题79

第6章活动纪录81

6.1堆栈帧82

6.1.1帧指针84

6.1.2寄存器84

6.1.3参数传递85

6.1.4返回地址86

6.1.5常驻帧变量86

6.1.6静态连接87

6.2 MiniJava语言编译器中的帧88

6.2.1帧的表示90

6.2.2局部变量91

6.2.3临时(局部)变量和标号92

6.2.4静态连接的管理92

程序设计:帧92

进一步阅读93

习题93

7.1中间树96

第7章翻译成中间代码96

7.2树的翻译98

7.2.1表达式的类型98

7.2.2简单变量101

7.2.3数组变量102

7.2.4结构化的L-值103

7.2.5下标和域选择103

7.2.6关于安全性104

7.2.7算术运算105

7.2.8条件105

7.2.1 0记录和数组的创建106

7.2.9字符串106

7.2.11while循环108

7.2.12 for循环108

7.2.1 3函数调用109

7.2.14静态连接109

7.3声明110

7.3.1变量定义110

7.3.2函数定义110

7.3.3段111

7.3.4类和对象112

习题113

程序设计:翻译为树113

第8章 基本块和轨迹115

8.1规范树116

8.1.1 ESEQ的翻译116

8.1.2常用重写规则117

8.1.3将CALL移至顶部119

8.1.4语句的线性表119

8.2时间条件分支120

8.2.1基本块120

8.2.3完成121

8.2.2轨迹121

8.2.4最佳轨迹122

进一步阅读122

习题122

第9章指令选择124

9.1指令选择的算法126

9.1.1 maximal munch算法127

9.1.2动态编程128

9.1.3树的文法规则129

9.1.5表示算法的效率131

9.1.4快速匹配131

9.2 CISC机132

9.3 MiniJava编译器中的指令选择134

9.3.1抽象的汇编语言指令135

9.3.2生成汇编指令137

9.3.3过程调用139

9.3.4如果不存在帧指针139

程序设计:指令选择140

进一步阅读142

习题143

第10章活性分析144

10.1数据流的解145

10.1.1活性的计算146

10.1.2集合的表示147

10.1.3时间复杂度148

10.1.4最少的确定点148

10.1.5静态与动态活性149

10.1.6干扰图150

10.2 MiniJava编译器中的活性分析151

10.2.1图151

10.2.2控制流图152

10.2.3活性分析153

程序设计:构造流图154

程序设计:活性154

习题154

第11章寄存器分配156

11.1简化着色156

11.1.1举例157

11.2结合158

11.2.1溢出160

11.3.2调用保存寄存器和被调用保存寄存器161

11.3预着色节点161

11.3.1机器寄存器临时变量的复制161

11.3.3预着色节点的例子162

11.4图着色实现165

11.4.1数据结构166

11.4.2不变量167

11.4.3程序代码167

11.5树的寄存器分配172

程序设计:图着色175

习题176

进一步阅读176

第12章使之成为整体179

程序设计进入/退出过程179

程序设计:使程序运行181

第二部分高级课题182

第13章无用信息收集182

13.1标记—清除收集机制183

13.2引用计数186

13.3复制收集187

13.4世代收集190

13.5增量收集192

13.6 Baker算法193

13.7编译器接口194

13.7.1快速分配194

13.7.2数据分布描述195

13.7.3派生指针195

程序设计:描述符196

程序设计:无用信息收集197

进一步阅读197

习题198

第14章面向对象语言200

14.1类扩展200

14.2数据字段的单继承201

14.2.1方法201

14.3多继承202

14.4类成员测试204

14.5私有字段成员和方法207

14.6无类语言207

14.7优化面向对象程序207

进一步阅读208

程序设计:带类扩展的MiniJava208

习题209

第15章函数式编程语言211

15.1一种简单的函数式语言211

15.2闭包213

15.2.1堆分配激活记录213

15.3恒变量214

15.3.1基于连续的I/O216

15.3.2语言变换216

15.3.3纯函数式语言的优化217

15.4内部扩展218

15.5闭包转换224

15.6有效尾部递归226

15.7惰性评估227

15.7.1按名调用评估228

15.7.2按需调用229

15.7.3一个惰性程序的计算230

15.7.4推高不变量230

15.7.5惰性函数式程序的优化231

15.7.6严格性分析233

进一步阅读235

程序设计:编译函数式语言236

习题236

第16章 多态类型237

16.1参数多态237

16.2多态类型检查240

16.3多态程序的翻译244

16.3.1指针、整型和包装245

进一步阅读246

16.4静态重载的解决方法246

习题247

第17章数据流分析248

17.1流分析的中间表示249

17.1.1四元组249

17.2多种的数据流分析250

17.2.1到达定义251

17.2.2可用表达式252

17.2.3到达表达式253

17.2.4活性分析253

17.3.2常量传播254

17.3.3复制传播254

17.3.1公用子表达式消除254

17.3使用数据流分析的变换254

17.3.4死代码消除255

17.4加快数据流分析255

17.4.1位向量255

17.4.2基本块255

17.4.3节点排序256

17.4.4 use-def和def-use链257

17.4.5 work-list算法257

17.4.6增量式数据流分析258

17.5别名分析261

17.5.1基于类型的别名分析262

17.5.2基于流的别名分析262

17.5.3使用may-alias信息264

17.5.4严格纯函数式语言中的别名分析265

进一步阅读265

习题265

第18章循环优化267

18.1必经节点269

18.1.1寻找必经节点的算法269

18.1.2直接必经节点270

18.1.3循环271

18.1.4循环前置首部272

18.2循环不变量的计算272

18.2.1提升273

18.3 归纳变量274

18.3.1归纳变量检查275

18.3.2强度削减276

18.3.3消除277

18.3.4重写比较277

18.4数组边界检查278

18.5循环展开281

进一步阅读282

习题282

第19章静态单赋值表284

19.1转化为SSA表286

19.1.1插入φ-function的准则286

19.1.2必经前端287

19.1.3插入φ-function289

19.1.4变量重命名290

19.2.1深度优先生成(Spanning)树291

19.2必经节点树的有效计算291

19.1.5边分离291

19.2.2半必经节点292

19.2.3 Lengauer-Tarjan算法293

19.3采用SSA优化算法296

19.3.1消除死代码296

19.3.2简单常量传播297

19.3.3条件常量复制298

19.3.4保存必经性质300

19.4.1存储相关301

19.4数组,指针和存储301

19.5控制相关图302

19.5.1积极的死代码消除304

19.6从SSA表后的转换305

19.6.1关于SSA的活性的分析305

19.7函数式中介表306

进一步阅读309

习题310

第20章流水线和调度313

20.1不受资源限制的循环调度315

20.2资源限制循环流水线318

20.2.1模调度319

20.2.2发现最小启动间隔320

20.2.3其他控制流322

20.2.4编译器应该调度指令吗323

20.3分支预测323

20.3.1静态转移预测324

20.3.2编译器应该预测分支转移吗?324

进一步阅读325

习题326

21.1高速缓冲存储器结构328

第21章分级存储器体系328

21.2 cache块的排列330

21.2.1指令cache的对齐331

21.3预取指令332

21.4循环交换335

21.5分块336

21.6无用信息收集和分级存储器体系338

进一步阅读339

习题340

附录 MiniJava语言参考手册341

参考文献343

热门推荐