前言Ⅰ 第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 |