图书介绍
现代编译器的Java实现 第2版PDF|Epub|txt|kindle电子书版本网盘下载
![现代编译器的Java实现 第2版](https://www.shukui.net/cover/32/30870529.jpg)
- (美)Andrew W.Appel等著;陈明等译 著
- 出版社: 北京:电子工业出版社
- ISBN:7121002701
- 出版时间:2004
- 标注页数:350页
- 文件大小:18MB
- 文件页数:368页
- 主题词:Java
PDF下载
下载说明
现代编译器的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