前言Ⅰ
第1章编译程序概论1
11什么是编译程序1
12编译过程概述2
13编译程序的结构6
14编译阶段的组合7
15编译技术和软件工具7
第2章PL/0编译程序的实现9
21PL/0语言描述9
211PL/0语言的语法描述图9
212PL/0语言文法的EBNF
表示11
22PL/0编译程序的结构12
23PL/0编译程序的词法分析14
24PL/0编译程序的语法分析16
25PL/0编译程序的目标代码结构
和代码生成19
26PL/0编译程序的语法错误
处理21
27PL/0编译程序的目标代码解释
执行时的存储分配24
28练习26
第3章文法和语言29
31文法的直观概念29
32符号和符号串30
33文法和语言的形式定义31
34文法的类型35
35上下文无关文法及其语法树37
36句型的分析39
361自上而下的分析方法40
362自下而上的分析方法40
363句型分析的有关问题41
37有关文法实用中的一些说明43
371有关文法的实用限制43
372上下文无关文法中的
ε规则43
38练习44
第4章词法分析47
41词法分析程序的设计47
411词法分析程序与语法
分析程序的接口方式47
412词法分析程序的输出47
413将词法分析工作分离
的考虑48
42单词的描述工具49
421正规文法49
422正规式49
423正规文法到正规式51
43有穷自动机52
431确定的有穷
自动机(DFA)52
432不确定的有穷
自动机(NFA)54
433NFA→DFA的转换54
434确定有穷自动机的化简57
44正规式和有穷自动机的等
价性59
45正规文法和有穷自动机间
的转换62
46词法分析程序的自动构造
工具63
461LEX语言64
47练习66
第5章自顶向下语法分析方法69
51确定的自顶向下分析思想69
52LL(1)文法的判别73
53某些非LL(1)文法到LL(1)
文法的等价变换78
54不确定的自顶向下分析思想85
55确定的自顶向下分析方法87
551递归子程序法87
552预测分析方法87
56练习90
第6章自底向上优先分析法94
61自底向上优先分析法概述95
62简单优先分析法96
621优先关系96
622简单优先文法的定义97
623简单优先分析法98
63算符优先分析法98
631直观算符优先分析法99
632算符优先文法的定义100
633算符优先关系表的构造102
634算符优先分析算法109
635优先函数111
636算符优先分析法的
局限性115
64练习116
第7章LR分析法117
71LR分析概述117
72LR(0)分析118
721可归前缀和子前缀119
722识别活前缀的有限
自动机121
723活前缀及其可归前缀的
一般计算方法122
724LR(0)项目集规范族
的构造125
73SLR(1)分析132
74LR(1)分析139
741LR(1) 项目集族的
构造140
742LR(1)分析表的构造141
75LALR(1)分析143
76二义性文法在LR分析中
的应用149
77练习151
第8章语法制导翻译和中间代码生成155
81属性文法155
82语法制导翻译概论157
83中间代码的形式159
831逆波兰记号159
832三元式和树形表示160
833四元式161
84简单赋值语句的翻译162
85布尔表达式的翻译163
851布尔表达式的翻译方法164
852控制语句中布尔表达式
的翻译165
86控制结构的翻译169
861条件转移169
862开关语句171
863for循环语句173
864出口语句175
865goto语句176
866过程调用的四元式产生177
87说明语句的翻译178
871简单说明句的翻译179
872过程中的说明179
88数组和结构的翻译180
881数组说明和数组元
素的引用180
882结构(记录)说明和引
用的翻译186
89练习188
第9章符号表190
91符号表的作用和地位190
92符号的主要属性及作用191
93符号表的组织196
931符号表的总体组织196
932符号表项的排列199
933关键字域的组织201
934其它域的组织202
935下推链域的组织209
94符号表的管理210
941符号表的初始化210
942符号的登录211
943符号的查找212
944符号表中分程序结构
层次的管理213
95练习216
第10章目标程序运行时的存储组织217
101数据空间的三种不同使用方法和
管理方法217
1011静态存储分配218
1012动态存储分配219
1013栈式动态存储分配219
1014堆式动态存储分配219
102栈式存储分配的实现220
1021简单的栈式存储分配的
实现220
1022嵌套过程语言的栈式
实现222
1023分程序结构的存储
管理226
103参数传递230
1031传值231
1032传地址232
1033过程参数232
104过程调用、过程进入和过程
返回233
105练习234
第11章代码优化236
111优化技术简介236
1111优化技术简介236
112局部优化239
1121基本块的划分239
1122基本块的变换239
1123基本块的DAG表示240
1124DAG的应用243
1125DAG构造算法讨论245
113控制流分析和循环优化247
1131程序流图与循环247
1132循环248
1133循环的查找248
1134可归约流图253
1135循环优化253
114数据流的分析与全局优化257
1141一些主要的概念258
1142数据流方程的一般
形式258
1143到达一定值数据流
方程259
1144可用表达式及其数据
流方程263
1145活跃变量数据流方程265
1146复写传播266
115练习267
第12章代码生成270
121代码生成概述270
122一个计算机模型270
123一个简单的代码生成器271
1231寄存器分配的原则271
1232待用信息链表法271
1233代码生成算法273
124代码生成研究现状275
1241中间语言的选择275
1242代码生成的自动化
研究277
125练习278
第13章编译程序实现的途径279
131编译程序的书写语言与T
型图279
132编译程序的自展技术279
133交叉编译与编译程序的移植281
134编译程序的构造工具282
1341基于LALR(1)的语法
分析程序的生成器
YACC282
1342基于LL(2)文法的编
译器的构造工具
(SD&EBNF-LL(2))283
1343词法分析程序的
生成器LEX286
135练习287
附录APL/0编译程序文本288
附录B词法分析程序生成器LEX的使
用方法306
B1LEX概述306
B2LEX源程序的格式307
B3LEX用的正规式307
B4LEX源程序中的动作310
B5识别规则的二义性312
B6LEX源程序中的辅助定义
部分312
B7怎样在UNIX系统中使
用LEX314
B8LEX源程序例子314
B9再谈上下文相关性的处理315
B10LEX源程序格式总结317
附录C语法分析程序自动产生器YACC
的使用方法319
C1YACC概述319
C2YACC源程序的一般格式320
C3YACC源程序说明部分的写法320
C31头文件表320
C32宏定义321
C33数据类型定义321
C34全局变量定义321
C35语法开始符定义322
C36语义值类型定义322
C37终结符定义323
C38运算符优先级及结合
性定义323
C4YACC源程序中语法规则部分
的写法325
C41语法规则的书写格式325
C42语义动作326
C43YACC解决二义性和冲突
的方法327
C44语法分析中的错误
处理328
C5程序段部分329
C51主程序329
C52错误信息报告程序329
C53词法分析程序329
C54其它程序段331
C6YACC源程序例子说明331
C61YACC的源程序例1332
C62YACC的源程序例2334
附录D编译原理实验要求339
附录E编译原理辅助教学软件功能介绍
和使用说明340
E1功能介绍340
E11THPL0CAI的功能340
E12TH\|CCAIS的功能340
E2使用说明341
E21THPL0CAI使用说明341
E22TH\|CCAIS使用说明342
E23其它补充说明350
参考文献351