编译器构造(Java语言版)
《编译器构造(Java语言版)》是2014年清华大学出版社出版的图书,作者是Anthony J. Dos Reis 。
基本介绍
- 书名:编译器构造(Java语言版)
- 作者:Anthony J. Dos Reis
- ISBN:9787302340553
- 定价:89元
- 出版社:清华大学出版社
- 出版时间:2014-3-14
- 装帧:平装
- 开本:16开
图书简介
编译器是计算机系统最核心最基础的支撑软体之一。编译器设计原理与技术相关的知识体系,可以体现从电脑程式设计语言到计算机体系结构相对独立的整机概念,又涉及到形式语言与自动机、数据结构与算法等计算机学科的基础理论,还关係到独特的软体设计方法,不愧为联繫计算机科学理论和计算机系统的典範。正如前辈Alfred V. Aho 和Jeffrey D.Ullman在他们的着作中所提到的,在每一个计算机学者的职业生涯中,都会反覆用到这些原理和技术。正因为如此,在大多数高等院校的计算机科学与技术专业,编译原理与技术都作为必修的核心专业基础课程之一。
图书目录
1.1 概述 1
1.2 语言的基本概念 1
1.3 编译器的基本概念 2
1.4 集合论中的基本概念 4
1.5 空串 6
1.6 连线 6
1.7 指数记法 6
1.8 星运算符(也称为0次或多次运算符) 7
1.9 串集合的连线 8
1.10 加运算符(也称为1次或多次运算符) 9
1.11 问号运算符(也称为0次或1次运算符) 10
1.12 包含单独一个串的集合的简便记法 10
1.13 运算符优先权 11
1.14 正规表达式 11
1.15 正则表达式的局限性 13
问题 ... 14
第2章 上下文无关文法(一) 16
2.1 概述 16
2.2 什幺是上下文无关文法 17
2.3 基于上下文无关文法的推导 18
2.4 由上下文无关文法定义的语言 19
2.5 上下文无关文法的不同表示方法 21
2.6 一些简单文法 22
2.7 基于上下文无关文法的语言生成技术 25
2.8 正规文法和右线性文法 30
2.9 基于正规文法的计数 32
2.10 表的文法 33
2.11 一个不是上下文无关的重要语言 38
问题 ... 39
第3章 上下文无关文法(二) 42
3.1 概述 42
3.2 语法分析树 42
3.3 最左和最右推导 43
3.4 替换 45
3.5 二义文法 46
3.6 确定可致空的非终结符 51
3.7 消除 ( 产生式 52
3.8 消除unit产生式 55
3.9 消除无用非终结符 57
3.10 递归转换 62
3.11 增加空串到语言 67
问题 ... 68
第4章 上下文无关文法(三) 73
4.1 概述 73
4.2 算术表达式文法 73
4.3 文法中结合性和优先权的描述 78
4.4 Backus-Naur範式 80
4.5 语法图 82
4.6 抽象语法树和三地址码 84
4.7 非收缩文法 85
4.8 基本非收缩文法 85
4.9 上下文无关文法到基本非收缩文法的转换 86
4.10 上下文无关语言的pumping特性 88
问题...... 92
第5章 Chomsky层次(选讲) 94
5.1 概述 94
5.2 上下文有关产生式 95
5.3 上下文有关文法 96
5.4 非受限文法 98
问题..... 98
第6章 自上而下语法分析 100
6.1 概述 100
6.2 自上而下构造语法分析树 100
6.3 失败的语法分析 102
6.4 不适合自上而下语法分析的文法 102
6.5 确定的语法分析器 103
6.6 藉助栈的语法分析器 104
6.7 用表来表示栈式语法分析器 109
6.8 处理不以终结符领头的产生式 109
6.9 用Java写一个栈式语法分析器 110
问题..... 117
第7章 LL(1)文法 120
7.1 概述 120
7.2 产生式右端的FIRST集合 120
7.3 确定操作序列 122
7.4 确定 ( 产生式的选择集合 124
7.5 后跟-左端-后跟-最右规则 127
7.6 右端可致空的产生式的选择集合 129
7.7 包含输入结束符的选择集合 130
7.8 针对含lambda产生式文法的栈式语法分析器 133
7.9 将非LL(1)文法转换为LL(1)文法 134
7.10 用二义文法进行分析 141
7.11 计算FIRST和FOLLOW集合 143
问题..... 145
第8章 表驱动的栈式语法分析器(选讲) 151
8.1 概述 151
8.2 统一栈式语法分析器的操作 152
8.3 实现表驱动的栈式语法分析器 154
8.4 表驱动栈式语法分析器的改进 159
8.5 不确定的语法分析器--偏向理论的内容(选讲) 160
问题..... 162
第9章 递归-下降语法分析 164
9.1 概述 164
9.2 一个简单的递归-下降语法分析器 164
9.3 处理lambda产生式 171
9.4 一个公共错误 175
9.5 产生式的Java代码 176
9.6 递归-下降语法分析器中提取左公因子 177
9.7 消除尾递归 182
9.8 翻译星号、加号和问号算符 185
9.9 反向动作 187
问题..... 189
第10章 递归-下降翻译 192
10.1 概述 192
10.2 一个简单的翻译文法 192
10.3 转换翻译文法到Java代码 193
10.4 翻译文法的描述 195
10.5 在语法分析过程中传递信息 207
10.6 L-属性文法 213
10.7 一个新的单词符号管理器 214
10.8 解决单词符号向前一个字元看问题 217
10.9 新单词符号管理器的代码 217
10.10 前缀表达式编译器的翻译文法 229
10.11 趣用递归(选讲) 233
问题..... 236
第11章 彙编语言 239
11.1 概述 239
11.2 J1计算机的结构 239
11.3 机器语言指令 240
11.4 彙编语言指令 242
11.5 压入字元 242
11.6 aout指令 243
11.7 使用标号 243
11.8 使用彙编器 245
11.9 stav指令 248
11.10 编译赋值语句 249
11.11 编译print和println 252
11.12 输出字元串 253
11.13 输入十进制数 256
11.14 入口指导语句 257
11.15 更多的彙编语言内容 257
问题..... 257
第12章 一个简单的编译器S1 261
12.1 概述 261
12.2 源语言 261
12.3 源语言的文法 262
12.4 目标语言 263
12.5 符号表 264
12.6 代码生成器 264
12.7 token类 265
12.8 写出翻译文法 265
12.9 实现S1编译器 272
12.10 使用S1 287
12.11 关于扩展S1编译器的忠告 290
?12.11.1 更新单词符号管理器 290
?12.11.2 先调试单词符号管理器 291
?12.11.3 选择集合 291
?12.11.4 使用必要的break语句 291
?12.11.5 使用必要的Consume方法调用 291
?12.11.6 正确地解释翻译文法 292
12.12 对于S2的描述 292
问题..... 296
第13章 JavaCC(选讲) 302
13.1 概述 302
13.2 JavaCC中扩展的正规表达式 303
13.3 JavaCC输入档案 308
13.4 正规表达式动作描述 315
13.5 S1j的JavaCC输入档案 318
13.6 JavaCC产生的档案 326
13.7 使用星号和加号操作 330
13.8 选择点和向前看 333
13.9 JavaCC的选择算法 338
13.10 语法和语义的向前看描述(选讲) 342
13.11 用JavaCC仅生成单词符号管理器 344
13.12 使用单词符号链 346
13.13 抑制警告信息 349
问题..... 350
第14章 在S2基础上构造 354
14.1 概述 354
14.2 扩展println和print 354
14.3 级联赋值语句 359
14.4 一元加和减 362
14.5 readint语句 365
14.6 从命令行控制单词符号蹤迹的生成 365
14.7 S3的规範 366
问题..... 366
第15章 编译控制结构 370
15.1 概述 370
15.2 while语句 370
15.3 if语句 374
15.4 do-while语句 377
15.5 数字常量的範围检查 378
15.6 处理字元串中的反斜线-引号 380
15.7 用JavaCC处理反斜线(选讲) 381
15.8 JavaCC中的全局块(选讲) 386
15.9 处理跨行字元串 388
15.10 用JavaCC处理跨行字元串(选讲) 389
15.11 JavaCC中的SPECIAL_TOKEN块(选讲) 394
15.12 错误恢复 396
15.13 JavaCC中的错误恢复(选讲) 400
15.14 S4的规範 401
问题..... 402
第16章 编译函式形式的程式 405
16.1 概述 405
16.2 分别彙编和连线 405
16.3 调用函式和从函式返回 408
16.4 S5的源语言 412
16.5 S5的符号表 413
16.6 S5的代码生成器 415
16.7 S5的翻译文法 416
16.8 与库连线 427
16.9 S5规範 428
16.10 扩展S5(选讲) 428
问题..... 430
第17章 有限自动机 433
17.1 概述 433
17.2 确定有限自动机 433
17.3 转换DFA到正规表达式 435
17.4 DFA的Java代码 438
17.5 非确定有限自动机 441
17.6 使用NFA作为一个算法 443
17.7 利用子集算法转换NFA到DFA 444
17.8 转换DFA到正规文法 446
17.9 转换正规文法到NFA 448
17.10 转换正规表达式到NFA 449
17.11 求出最小的DFA 452
17.12 正规语言的泵理论 456
问题..... 457
第18章 课程设计项目:用编译技术实现grep 460
18.1 概述 460
18.2 grep程式的正规表达式 461
18.3 针对正规表达式的单词符号管理器 462
18.4 正规表达式的文法 463
18.5 正规表达式编译器的目标语言 465
18.6 用NFA进行模式匹配 471
问题..... 474
第19章 编译到面向暂存器的结构 476
19.1 概述 476
19.2 使用暂存器指令集 477
19.3 修改R1符号表 478
19.4 R1的语法分析器和代码生成器 480
问题..... 487
第20章 最佳化 488
20.1 概述 488
20.2 使用ldc指令 489
20.3 重用临时变数 490
20.4 常量合併 494
20.5 暂存器分配 496
20.6 窥孔最佳化 498
问题..... 502
第21章 解释器 506
21.1 概述 506
21.2 转换S1到I1 507
21.3 解释转移控制的语句 510
21.4 实现编译:解释器CI1 512
21.5 解释器的优点 517
问题..... 517
第22章 自下而上语法分析 519
22.1 概述 519
22.2 自下而上语法分析原理 519
22.3 语法分析:右递归文法对比左递归文法 522
22.4 用二义文法进行自下而上语法分析 523
22.5 不归约规则 526
22.6 SLR(1)语法分析 528
22.7 移进/归约冲突 533
22.8 归约/归约冲突 535
22.9 LR(1)语法分析 537
问题..... 540
第23章 yacc 542
23.1 概述 542
23.2 yacc输入和输出档案 542
23.3 一个yacc-生成的简单语法分析器 543
23.4 用取值栈传递值 551
23.5 对二义文法使用yacc 556
23.6 在语法分析树中传递值 559
23.7 实现Sly 560
23.8 jflex 567
问题..... 574
附录A 栈指令集 576
附录B 暂存器指令集 580
参考文献 583