第1章 绪论 1
1.1编译方法的定义 1
1.2编译的基本过程 2
1.3编译的基本方法 7
1.3.1编译程序的基本组成 7
1.3.2以语法分析程序为主导的编译方法 9
1.3.3多遍扫描编译方法 10
1.4SPL编译程序的基本结构 10
1.4.1简化PASCAL语言——SPL的选取 10
1.4.2 SPL编译程序总体结构 11
1.5学习编译方法的目的与方法 14
习题 15
第2章 词法分析程序 16
2.1词法的简单描述 16
2.1.1术语解释 16
2.1.2正则表达式 17
2.1.3状态转换图 18
2.1.4不同语言具有的特殊问题 20
2.2词法分析程序的设计方法 21
2.2.1 SPL语言的词法规则 21
2.2.2名表和保留字表 22
2.2.3 SPL编译词法分析使用的读写程序 25
2.2.4几种单词的识别程序 28
2.2.5 SPL词法分析程序的基本结构 30
2.3自动产生词法分析程序 32
2.3.1有限状态自动机的表示方法 32
2.3.2从正则表达式到有限状态自动机 33
2.3.3词法分析程序的自动产生方法 38
习题 41
第3章 语法分析 42
3.1文法与语言简介 42
3.1.1上下文无关文法 42
3.1.2 BNF形式 44
3.1.3自上向下推导 46
3.1.4自下向上归约 47
3.2算符优先法 48
3.2.1算符优先表 49
3.2.2算符优先法的分析过程 50
3.3优先数法 53
3.3.1优先函数 53
3.3.2优先数法的分析过程 54
3.4递归子程序法 55
3.4.1什么是递归子程序 55
3.4.2如何编制递归子程序 56
3.4.3对语法规则的改进 58
3.4.4递归子程序法编程方法示例——SPL编译语法分析程序 64
3.5状态矩阵法 69
3.5.1状态矩阵的定义 69
3.5.2状态矩阵的构造 70
3.5.3状态矩阵法的分析处理过程 72
3.6语法分析程序自动产生概述 72
3.6.1 LR分析器 73
3.6.2分析器产生器 76
习题 79
第4章 符号表结构及语义分析 80
4.1SPL编译用符号表结构 80
4.1.1标识符表 80
4.1.2程序体表 81
4.1.3层次表 82
4.1.4类型结构表 83
4.1.5符号表的多样性 85
4.2查填符号表和文件处理的算法 86
4.3SPL编译语义分析程序 89
4.3.1程序体语义分析 90
4.3.2表达式语义分析 95
4.3.3语句部分语义分析 99
习题 101
第5章 存储分配 102
5.1各类数据的存储分配 102
5.1.1简单变量的存储分配 102
5.1.2数组的存储分配 103
5.1.3字符串的存储分配 105
5.1.4记录结构的存储分配 105
5.2静态存储分配——FORTRAN存储分配 106
5.2.1FORTRAN的数据区 106
5.2.2对临时变量的存储分配 107
5.2.3对公用元素和等价元素的存储分配 109
5.3简单栈式存储分配 117
5.3.1活动记录 118
5.3.2过程调用和返回的实现 119
5.3.3分配数组空间 119
5.4嵌套过程语言的栈式存储分配 120
5.4.1嵌套层次显示表和活动记录 120
5.4.2过程调用和返回的现实 121
5.4.3参数传递 121
5.4.4 SPL编译的存储分配策略 123
5.5堆式存储管理简介 126
习题 126
第6章 语义处理——中间结果产生 127
6.1以语法分析为主导的语义处理 127
6.2中间结果的代码形式 127
6.2.1逆波兰表示法 128
6.2.2三元式 129
6.2.3四元式 129
6.3SPL计算机——SPL采用的中间代码形式 130
6.3.1计算机的硬件——存储器和寄存器 130
6.3.2 SPL计算机的指令系统——中间结果代码 131
6.4SPL中间结果产生程序 133
6.4.1总体结构 133
6.4.2表达式的目标结构 135
6.4.3各种语句的目标结构 139
6.4.4过程调用的目标结构 141
6.4.5过程说明的目标结构 143
6.5SPL解释程序 143
6.5.1 SPL解释程序的结构 143
6.5.2程序清单说明 146
习题 146
第7章 优化简介和目标代码生成 148
7.1基本块的优化 148
7.2循环优化 150
7.3目标代码生成概述 154
7.4寄存器分配 156
习题 157
第8章 错误处理 159
8.1错误处理概述 159
8.1.1语法错误和语义错误 159
8.1.2错误处理程序 160
8.2错误校正 161
8.2.1词法错误校正 161
8.2.2自顶向下分析中的语法错误校正 161
8.2.3语义错误的校正 163
8.3SPL编译错误处理的基本方法 164
8.3.1前三遍扫描的错误处理方法 164
8.3.2第四遍扫描中间结果产生的错误处理 168
8.3.3解释执行程序的错误处理 168
习题 169
第9章 课程实践 170
9.1课程实践的安排和要求 170
9.1.1课程实践的安排 170
9.1.2课程实践的要求 170
9.2SPL语言编译程序(软盘)的使用说明 171
9.2.1软盘内容 171
9.2.2SPL编译程序的使用方法 171
9.3用SPL语言编写的用户源程序实例 172
9.4SPL编译程序使用方法参考实例 176
附录1 SPL编译程序源程序清单 226
附录2 SPL解释程序源程序清单 303