第1章 引论 1
1.1 什么是编译程序 1
1.2 编译过程概述 2
1.3 编译程序的结构 4
1.4 为什么要学习编译技术 6
1.5 习题 7
第2章 形式语言基本知识 9
2.1 形式语言的特征 9
2.2 一个形式语言例子 11
2.3 形式语言的归纳定义 12
2.4 文法的分类 14
2.4.1 0型文法 14
2.4.2 1型文法(上下文有关文法) 14
2.4.3 2型文法(上下文无关文法) 15
2.4.4 3型文法(正则文法) 15
2.4.5 文法的类型决定了语言的类型 15
2.5 语法树与文法的二义性 16
2.5.1 什么是文法的二义性 16
2.5.2 修改二义性文法 17
2.5.3 计算机语言文法中的二义性问题 17
2.5.4 EBNF描述符 18
2.6 习题 20
第3章 语句分析 23
3.1 语句分析概述 23
3.2 自顶向下分析 24
3.3 自底向上分析 25
3.4 简单辨认算法 26
3.5 对文法的限制规则1 27
3.6 对文法的限制规则2 29
3.7 如何构造等价的LL(1)文法 30
3.8 习题 30
4.1 从EBNF表示式到语法图的转换 33
第4章 语法图 33
4.2 语法图转换实例 34
4.3 从语法图判别两条限制规则 35
4.4 习题 36
第5章 给定语法的语法分析程序构造 39
5.1 给定语法的语法分析程序的主程序 39
5.2 从语法图到语法分析程序的转换法则 40
5.3 给定语法的语法分析程序构造实例 42
5.3.1 语法分析程序构造实例 42
5.3.2 SI-NS图形式的语法分析程序构造实例 44
5.3.3 语法分析程序的编译和执行示例 45
5.4 习题 48
第6章 程序设计语言PL/0 51
6.1 PL/0语言概述 51
6.1.1 PL/0语言的功能 51
6.1.2 一个PL/0程序实例 52
6.2 EBNF定义的PL/0语法 53
6.3 PL/0语法图 54
6.4 判别是否符合两条限制规则 56
6.5 习题 58
7.1 词法分析程序的任务 59
第7章 PL/0语言的词法分析程序构造 59
7.2 词法分析程序的设计 60
7.2.1 过程getch 61
7.2.2 处理保留字和标识符 62
7.2.3 处理常数 62
7.2.4 处理组合字符和单个字符 63
7.3 习题 63
第8章 PL/0语言的语法分析程序构造 67
8.1 由语法图到过程调用相关图 67
8.2 从相关图到程序的总体结构 68
8.3 写出每一个语法分析子程序 69
8.4 语法分析程序的扩充 78
8.4.1 建立符号表与主程序的扩充 79
8.4.2 建立error子程序过程和出错信息表 80
8.4.3 标识符的处理与程序的扩充 81
8.5 PL/0语法分析程序及其执行 83
8.5.1 PL/0语法分析文本程序 83
8.5.2 PL/0语法分析程序的SI-NS图 89
8.5.3 PL/0语法分析程序的执行 95
8.6 习题 98
9.1 语法出错处理概论 101
第9章 语法出错处理 101
9.2 常见错误的分析处理 103
9.2.1 修改语法分析程序 103
9.2.2 修改语法定义 105
9.3 不可预料错误的处理 106
9.3.1 采取的策略和相应的措施 106
9.3.2 出错处理分析举例 107
9.4 PL/0语法出错处理程序及其执行 108
9.4.1 具有出错处理的PL/0语法分析程序program5 108
9.4.2 具有出错处理的PL/0语法分析程序SI-NS图 115
9.4.3 语法出错处理程序执行实例 123
9.5 习题 126
第10章 目标计算机及其解释程序 129
10.1 目标计算机的组织结构和指令格式 130
10.1.1 目标计算机的组织结构 130
10.1.2 目标计算机的指令和指令格式 132
10.2 数据存储器的动态存储管理 133
10.2.1 数据动态存储分析 133
10.2.2 程序静态级别和动态存储分配 134
10.2.3 数据动态存储采取的技术措施 136
10.3 目标计算机指令系统及其解释 136
10.4.1 PL/O目标程序的解释程序 138
10.4 解释程序interpret及其执行 138
10.4.2 解释程序执行实例 139
10.4.3 在interpret的SI-NS图上执行解释程序 140
10.5 习题 142
第11章 语义分析与代码生成 143
11.1 table数组和enter过程的扩充 143
11.1.1 table数组的扩充 144
11.1.2 enter过程的扩充 144
11.3 表达式、项、因子及关系式的翻译 145
11.3.1 后缀式处理的规则 145
11.2 命令代码生成过程gen 145
11.3.2 后缀式翻译在代码生成中的实现 146
11.3.3 对表达式和关系式翻译举例 149
11.4 语句的翻译 150
11.4.1 语句翻译处理规则 150
11.4.2 语句翻译在程序扩充中的实现 151
11.4.3 语句翻译举例 153
11.5 生成PL/0目标代码程序 155
11.5.1 在计算机上执行program6生成代码程序 156
11.5.2 在SI-NS图上执行program6生成代码程序 157
11.5.3 掌握代码生成算法,直接翻译写出代码程序 162
11.6 program6程序文本 163
11.7 习题 175
第12章 T形图与编译开发移植技术 179
12.1 T形图 179
12.1.1 程序在计算机上执行的表示 179
12.1.2 编译程序的表示 179
12.1.3 编译和执行过程的表示 180
12.1.4 多级编译过程的表示 180
12.1.5 解释执行过程的表示 180
12.2 编译程序开发的自展技术 181
12.4 编译程序的移植技术 182
12.3 编译程序改进的自展技术 182
12.4.1 在M1机器上进行从M1到M2的移植 183
12.4.2 在M2机器上进行从M1到M2的移植 183
12.4.3 用虚拟机H进行从M1到M2的移植 184
12.5 习题 184
第13章 课程设计 187
13.1 PL/x语法定义 187
13.2 统一符号 188
13.3.1 阶段一要求 189
13.3 课程设计要求 189
13.3.2 阶段一检查 190
13.3.3 阶段二要求 190
13.3.4 阶段二检查 190
附录 191
附录A PL/0编译程序SI-NS图 191
附录B 有关SI-NS图 203
B.1 读起来比程序容易理解百倍的SI-NS图 203
B.2 程序图形化表示方法 206
B.2.1 现有文本式语言程序的弊端 206
B.2.2 “程序图形化表示”是世界上都在致力研究的一项技术 206
B.2.4 比较PAD、CSD、NS与SI-NS图 207
B.2.3 作者提出了具有优势的SI-NS图 207
B.2.5 SI-NS图技术在长期的软件开发和教学实践中得到了验证 212
附录C 表格控制的通用语法分析程序构造 212
C.1 语法图表示成表格数据结构 213
C.2 表格控制的语法分析程序 215
C.3 通用语法分析程序的实施步骤 216
C.3.1 用EBNF定义EBNF语法 216
C.3.2 为EBNF语法设计一个语法分析程序 217
C.3.3 将语法分析程序扩充为能产生语法分析表格的翻译程序 219
C.3.4 将翻译程序与前一节的表格控制语法分析程序组合在一起 220
C.4 习题 227
附录D 并行多进程语言的扩充 228
附录E 集合与符号串 233
E.1 集合 233
E.1.1 集合的基本概念 233
E.1.2 集合间的关系 234
E.1.3 集合的运算 235
E.1.4 幂集 236
E.1.5 笛卡儿乘积 236
E.2 符号串 238
E.3 习题 239
附录F PASCAL语法图 240
参考文献 243