上传者: zxc1985418
|
上传时间: 2021-10-07 23:41:11
|
文件大小: 11.13MB
|
文件类型: -
编译领域里程碑式的经典著作——龙书,20年后终于出版新版!
这是一个延绵30年的故事,这是一部关于龙书的传奇!
最新版本,增添两章节内容,使龙书地位更权威!
目 录
译者序
前言
第1章 概论 1
1.1 为什么要用编译器 2
1.2 与编译器相关的程序 3
1.3 翻译步骤 5
1.4 编译器中的主要数据结构 8
1.5 编译器结构中的其他问题 10
1.6 自举与移植 12
1.7 TINY样本语言与编译器 14
1.7.1 TINY语言 15
1.7.2 TINY编译器 15
1.7.3 TM机 17
1.8 C-Minus:编译器项目的一种语言 18
练习 19
注意与参考 20
第2章 词法分析 21
2.1 扫描处理 21
2.2 正则表达式 23
2.2.1 正则表达式的定义 23
2.2.2 正则表达式的扩展 27
2.2.3 程序设计语言记号的正则表达式 29
2.3 有穷自动机 32
2.3.1 确定性有穷自动机的定义 32
2.3.2 先行、回溯和非确定性自动机 36
2.3.3 用代码实现有穷自动机 41
2.4 从正则表达式到DFA 45
2.4.1 从正则表达式到NFA 45
2.4.2 从NFA到DFA 48
2.4.3 利用子集构造模拟NFA 50
2.4.4 将DFA中的状态数最小化 51
2.5 TINY扫描程序的实现 52
2.5.1 为样本语言TINY实现一个扫描
程序 53
2.5.2 保留字与标识符 56
2.5.3 为标识符分配空间 57
2.6 利用Lex 自动生成扫描程序 57
2.6.1 正则表达式的Lex 约定 58
2.6.2 Lex输入文件的格式 59
2.6.3 使用Lex的TINY扫描程序 64
练习 65
编程练习 67
注意与参考 67
第3章 上下文无关文法及分析 69
3.1 分析过程 69
3.2 上下文无关文法 70
3.2.1 与正则表达式比较 70
3.2.2 上下文无关文法规则的说明 71
3.2.3 推导及由文法定义的语言 72
3.3 分析树与抽象语法树 77
3.3.1 分析树 77
3.3.2 抽象语法树 79
3.4 二义性 83
3.4.1 二义性文法 83
3.4.2 优先权和结合性 85
3.4.3 悬挂else问题 87
3.4.4 无关紧要的二义性 89
3.5 扩展的表示法:EBNF和语法图 89
3.5.1 EBNF表示法 89
3.5.2 语法图 91
3.6 上下文无关语言的形式特性 93
3.6.1 上下文无关语言的形式定义 93
3.6.2 文法规则和等式 94
3.6.3 乔姆斯基层次和作为上下文无关
规则的语法局限 95
3.7 TINY语言的语法 97
3.7.1 TINY的上下文无关文法 97
3.7.2 TINY编译器的语法树结构 98
练习 101
注意与参考 104
第4章 自顶向下的分析 105
4.1 使用递归下降分析算法进行自顶向下
的分析 105
4.1.1 递归下降分析的基本方法 105
4.1.2 重复和选择:使用EBNF 107
4.1.3 其他决定问题 112
4.2 LL(1)分析 113
4.2.1 LL(1)分析的基本方法 113
4.2.2 LL(1)分析与算法 114
4.2.3 消除左递归和提取左因子 117
4.2.4 在LL(1)分析中构造语法树 124
4.3 First集合和Follow集合 125
4.3.1 First 集合 125
4.3.2 Follow 集合 130
4.3.3 构造LL(1)分析表 134
4.3.4 再向前:LL(k)分析程序 135
4.4 TINY语言的递归下降分析程序 136
4.5 自顶向下分析程序中的错误校正 137
4.5.1 在递归下降分析程序中的错误
校正 138
4.5.2 在LL(1)分析程序中的错误校正 140
4.5.3 在TINY分析程序中的错误校正 141
练习 143
编程练习 146
注意与参考 148
第5章 自底向上的分析 150
5.1 自底向上分析概览 151
5.2 LR(0)项的有穷自动机与LR(0)分析 153
5.2.1 LR(0)项 153
5.2.2 项目的有穷自动机 154
5.2.3 LR(0)分析算法 157
5.3 SLR(