译者序
前言
第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.8 C-Minus:编译器项目的一种语言 18
练习 19
注意与参考 20
第2章 词法分析 21
2.1 扫描处理 21
2.2 正则表达式 23
2.3 有穷自动机 32
2.4 从正则表达式到DFA 45
2.5 TINY扫描程序的实现 52
2.6 利用Lex 自动生成扫描程序 57
练习 65
编程练习 67
注意与参考 67
第3章 上下文无关文法及分析 69
3.1 分析过程 69
3.2 上下文无关文法 70
3.3 分析树与抽象语法树 77
3.4 二义性 83
3.5 扩展的表示法:EBNF和语法图 89
3.6 上下文无关语言的形式特性 93
3.7 TINY语言的语法 97
练习 101
注意与参考 104
第4章 自顶向下的分析 105
4.1 使用递归下降分析算法进行自顶向下的分析 105
4.2 LL(1)分析 113
4.3 First集合和Follow集合 125
4.4 TINY语言的递归下降分析程序 136
4.5 自顶向下分析程序中的错误校正 137
练习 143
编程练习 146
注意与参考 148
第5章 自底向上的分析 150
5.1 自底向上分析概览 151
5.2 LR(0)项的有穷自动机与LR(0)分析 153
5.3 SLR(1)分析 160
5.4 一般的LR(1)和LALR(1)分析 166
5.5 Yacc:一个LALR(1)分析程序的生成器 173
5.6 使用Yacc生成TINY分析程序 186
5.7 自底向上分析程序中的错误校正 188
练习 192
编程练习 195
注意与参考 197第6章 语义分析 198第7章 运行时环境 266第8章 代码生成 305附录A 编译器设计方案 373附录B 小型编译器列表 381附录C Tiny Machine模拟器列表 417