logo资料库

清华大学《编译原理》.pdf

第1页 / 共356页
第2页 / 共356页
第3页 / 共356页
第4页 / 共356页
第5页 / 共356页
第6页 / 共356页
第7页 / 共356页
第8页 / 共356页
资料共356页,剩余部分请下载后查看
目录
第 1 章 编译程序概论
1.1 什么是编译程序
1.2 编译过程概述
1.3 编译程序的结构
1.4 编译阶段的组合
1.5 编译技术和软件工具
第 2 章 PL/0 编译程序的实现
2.1 PL/0 语言描述
2.1.1 PL/0 语言的语法描述图
2.1.2 PL/0 语言文法的 EBNF 表示
2.2 PL/0 编译程序的结构
2.3 PL/0 编译程序的词法分析
2.4 PL/0 编译程序的语法分析
2.5 PL/0 编译程序的目标代码结构和代码生成
2.6 PL/0 编译程序的语法错误处理
2.7 PL/0 编译程序的目标代码解释执行时的存储分配
2.8 练习
第 3 章 文法和语言
3.1 文法的直观概念
3.2 符号和符号串
3.3 文法和语言的形式定义
3.4 文法的类型
3.5 上下文无关语法及其语法树
3.6 句型的分析
3.7 有关文法使用中的一些说明
3.7.1 有关文法的使用限制
3.7.2 上下文无关文法中的E规则
3.8 练习
第 4 章 词法分析
4.1 词法分析程序的设计
4.1.1 词法分析程序与语法分析程序的接口方式
4.1.2 词法分析程序的输出
4.1.3 将词法分析工作分离的考虑
4.2 单词的描述工具
4.2.1 正规文法
4.2.2 正规式
4.2.3 正规文法到正规式
4.3 有穷自动机
4.3.1 确定的有穷自动机( DFA )
4.3.2 不确定的有穷自动机( NFA )
4.3.3 NFA->DFA 的转换
4.3.4 确定的有穷自动机的化简
4.4 正规式和有穷自动机的等价性
4.5 正规文法和有穷自动机间的转换
4.6 词法分析程序的自动构造工具
4.7 练习
第 5 章 自顶向下语法分析方法
5.1 确定的自顶向下分析思想
5.2 LL(1) 文法的判别
5.3 某些LL(1) 文法到 LL(1) 文法的等价转换
5.4 不确定的自顶向下分析思想
5.5 确定的自顶向下分析方法
5.5.1 递归子程序法
5.5.2 预测分析方法
5.6 练习
第 6 章 自底向上优先分析法
6.1 自底向上优先分析法概述
6.2 简单优先分析法
6.2.1 优先关系
6.2.2 简单优先文法的定义
6.2.3 简单优先分析法
6.3 算符优先分析法
6.3.1 直观算符优先分析法
6.3.2 算符优先文法的定义
6.3.3 算符优先关系表的构造
6.3.4 算符优先分析算法
6.3.5 优先函数
6.3.6 算符优先分析法的局限性
6.4 练习
第 7 章 LR分析法
7.1 LR分析概述
7.2 LR(0)分析
7.2.1 可规前缀和子前缀
7.2.2 识别前缀的有限自动机
7.2.3 前缀及其前缀的一般计算方法
7.2.4 LR(0) 项目集规范族的构造
7.3 SLR(1) 分析
7.4 LR(1)分析
7.4.1 LR(1) 项目集族的构造
7.4.2 LR(1) 分析表的构造
7.5 LALR(1) 分析
7.6 二义性在 LR 分析中应用
7.7 练习
第 8 章 语法制导翻译和中间代码生成
8.1 属性文法
8.2 语法制导翻译概论
8.3 中间代码的形式
8.3.1 逆波兰记号
8.3.2 三元式和树形表示
8.3.3 四元式
8.4 简单赋值语句的翻译
8.5 布尔表示的翻译
8.5.1 布尔表示的翻译方法
8.5.2 控制语句中布尔表达式的翻译
8.6 控制结构的翻译
8.6.1 条件转移
8.6.2 开关语句
8.6.3 for 循环语句
8.6.4 出口语句
8.6.5 goto语句
8.6.6 过程调用的四元式产生
8.7 说明语句的翻译
8.7.1 简单说明语句的翻译
8.7.2 过程中的说明
8.8 数组和结构的翻译
8.8.1 数组说明和数组元素的引用
8.8.2 结构(记录)说明和引用的翻译
8.9 练习
第 9 章 符号表
9.1 符号表的作用和地位
9.2 符号表的主要属性及作用
9.3 符号表的组织
9.3.1 符号表的总体组织
9.3.2 符号表项的排列
9.3.3 关键字的组织
9.3.4 其它域的组织
9.3.5 下推链域的组织
9.4 符号表的管理
9.4.1 符号表的初始化
9.4.2 符号的登录
9.4.3 符号的查找
9.4.4 符号中的分程序结构层次的管理
9.5 练习
第 10 章 目标程序运行时的存储组织
10.1 数据空间的三种不同使用方法和管理方法
10.1.1 静态存储分配
10.1.2 动态存储分配
10.1.3 栈式动态存储分配
10.1.4 堆式动态存储分配
10.2 栈式存储分配的实现
10.2.1 简单的栈式存储分配的实现
10.2.2 嵌套过程语言的栈式实现
10.2.3 分程序结构的存储管理
10.3 参数传递
10.3.1 传值
10.3.2 传地址
10.3.3 过程参数
10.4 过程调用、过程进入和过程返回
10.5 练习
第 11 章 代码优化
11.1 优化技术简介
11.1.1 优化技术简介
11.2 局部优化
11.2.1 基本快的划分
11.2.2 基本块的变换
11.2.3 基本块的DAG表示
11.2.4 DAG的应用
11.2.5 DAG构造算法讨论
11.3 控制流分析和循环优化
11.3.1 程序图与循环
11.3.2 循环
11.3.3 循环的查找
11.3.4 可规约流图
11.3.5 循环优化
11.4 数据流的分析与全局优化
11.4.1 一些主要的概念
11.4.2 数据流方程的一般形式
11.4.3 到达一定数据流方程
11.4.4 可用表达式及其数据流方程
11.4.5 活跃数据流方程
11.4.5 复写传播
11.5 练习
第 12 章 代码生成
12.1 代码生成概述
12.2 一个计算机模型
12.3 一个简单的代码生成器
12.3.1 寄存器分配的原则
12.3.2 待用信息链表法
12.3.3 代码生成算法
12.4 代码生成研究现状
12.4.1 中间语言的选择
12.4.2 代码生成的自动化研究
12.5 练习
第 13 章 编译程序实现的途径
13.1 编译程序书写语言与T型图
13.2 编译程序的自展技术
13.3 交叉编译与编译程序的移植
13.4 编译程序的构造工具
13.4.1 基于LALR(1)的语法分析程序的生成器YACC
13.4.2 基于LL(2)文法的编译器构造工具(SD&EBNF_LL(2))
13.4.3 语法分析程序的生成器 LEX
13.5 练习
附录 A PL/0 编译程序文本
附录 B 语法分析程序生成器 LEX 的使用方法
B.1 LEX 概述
B.2 LEX 源代码的格式
B.3 LEX用的正规式
B.4 LEX源代码中的动作
B.5 识别规则的二义性
B.6 LEX 源程序中的辅助定义部分
B.7 怎样在 UNIX 系统中使用 LEX
B.8 LEX 源程序例子
B.9 再谈上下文相关性的处理
B.10 LEX 源程序格式总结
附录 C 语法分析程序自动生成器 YACC的使用方法
C.1 YACC 概述
C.2 YACC 源程序的一般格式
C.3 YACC 源程序说明部分的写法
C.3.1 头文件
C.3.2 宏定义
C.3.3 数据类型定义
C.3.4 全局变量定义
C.3.5 语法开始符定义
C.3.6 语义值类型定义
C.3.7 总结符定义
C.3.8 运算符优先级及结合性定义
C.4 YACC 源程序中语法规则部分的写法
C.4.1 语法规则的书写格式
C.4.2 语义动作
C.4.3 YACC 解决二义性和冲突的方法
C.4.4 语法分析中的错误处理
C.5 程序段部分
C.5.1 主程序
C.5.2 错误信息报告程序
C.5.3 词法分析程序
C.5.4 其它程序段
C.6 YACC 源程序例子说明
C.6.1 YACC 的源程序例子 1
C.6.2 YACC 的源代码例 2
附录 D 编译原理实验要求
附录 E 编译语言计算机辅助教学软件功能介绍和使用说明
参考文献
分享到:
收藏