文件大小:77.32 MB
文件类型:pdf
发布时间:2021-08-25 14:28:35
需资源分:2
下载次数:1
Tag:编译器构造.pdf
::资源简介::
编译器构造
目录
第01章 绪论
1.1 概述和历史
1.2 编译器可以做什么
1.3 编译器结构
1.4 程序设计语言的语法和语义
1.5 编译器设计与程序设计语言设计
1.6 编译器分类
1.7 影响编译器设计的因素
练习
第02章 一个简单编译器
2.1 Micro编译器结构
2.2 Micro词法分析器
2.3 Micro 语法
2.4 递归下降语法分析
2.5 翻译 Micro
2.5.1 目标语言
2.5.2 临时变量
2.5.3 动作符号
2.5.4 语义信息
2.5.5 Micro动作符号
练习
第03章 词法分析—理论和实践
3.1 概述
3.2 正则表达式
3.3 有限自动机和词法分析器
3.4 使用词法分析器生成器
3.4.1 ScanGen
3.4.2 Lex
3.5 实现时考虑的问题
3.5.1 保留字
3.5.2 编译器指示与源程序行列表
3.5.3 符号表中的标识符条目
3.5.4 词法分析器的终止
3.5.5 多字符的超前搜索
3.5.6 词法错误恢复
3.6 将正则表达式转换为有限自动机
3.6.1 构造确定的有限自动机
3.6.2 优化有限自动机
练习
第04章 文法和语法分析
4.1 上下文无关文法:概念与记号
4.2 上下文无关文法中的错误
4.3 转换扩展 BNF文法
4.4 语法分析器与识别器
4.5 文法分析算法
练习
第05章 LL(1)文法及分析器
5.1 LL(1) Predict函数
5.2 LL(1)分析表
5.3 从LL(1)分析表构造递归下降分析器
5.4 LL(1)分析器驱动程序
5.5 LL(1)动作符号
5.6 文法的LL(1)化
5.7 LL(1)分析中的If-Then-Else问题
5.8 LLGen—LL(1)语法分析器生成器
5.9 LL(1)分析器的性质
5.10 LL(k)分析
练习
第06章 LR分析
6.1 移进-归约分析器
6.2 LR分析器
6.2.1 LR(0)分析
6.2.2 如何判定LR(0)分析程序工作的正确性
6.3 LR(1)分析
6.3.1 LR(1)分析的正确性
6.4 SLR(1)分析
6.4.1 SLR(1)分析的正确性
6.4.2 SLR(1)技术的局限性
6.5 LALR(1)分析
6.5.1 构造LALR(1)分析器
6.5.2 LALR(1)分析的正确性
6.6 在移进-归约分析器中调用语义例程
6.7 使用语法分析器生成器
6.7.1 LALRGen语法分析器生成器
6.7.2 Yacc
6.7.3 可控二义性的使用和误用
6.8 优化分析表
6.9 实用的LR(1)分析器
6.10 LR分析的性质
6.11 LL(1)和LALR(1)分析方法的比较
6.12 其他的移进-归约技术
6.12.1 扩展的超前搜索技术
6.12.2 优先级技术
6.12.3 一般的上下文无关分析器
练习
第07章 语义处理
7.1 语法制导翻译
7.2 语义处理技术
7.3 中间表示和代码生成
练习
第08章 符号表
8.1 符号表接口
8.2 基本实现技术
8.2.1 二叉搜索树
8.2.2 哈希表
8.2.3 串空间数组
8.3 块结构符号表
8.4 块结构符号表的扩展
8.4.1 域和记录
8.4.2 导出规则
8.4.3 导入规则
8.4.4 可更改的搜索规则
8.5 隐式声明
8.6 重载
8.7 前向引用
8.8 小结
练习
第09章 运行时存储组织
9.1 静态分配
9.2 栈分配
9.2.1 显示表
9.2.2 块级与过程级活动记录
9.3 堆分配
9.3.1 无空间释放
9.3.2 显式释放
9.3.3 隐式释放
9.3.4 管理堆空间
9.4 内存中的程序布局
9.5 静态链簇和动态链簇
9.6 形式过程
9.6.1 静态链簇
9.6.2 显示表
9.6.3 一些看法
练习
第10章 处理声明
10.1 声明处理的基本原则
10.1.1 符号表中的属性
10.1.2 类型描述符结构
10.1.3 语义栈中的列表结构
10.2 简单声明的动作例程
10.2.1 变量声明
10.2.2 类型定义、声明和引用
10.2.3 记录类型
10.2.4 静态数组
10.3 高级特性的动作例程
10.3.1 变量和常量声明
10.3.2 枚举类型
10.3.3 子类型
10.3.4 数组类型
10.3.5 变体记录
10.3.6 访问类型
10.3.7 包
10.3.8 attributes和semantics_record结构
练习
第11章 处理表达式和数据结构引用
11.1 概述
11.2 简单名字、表达式和数据结构的动作例程
11.3 高级特性的动作例程
练习
第12章 翻译控制结构
12.1 if语句
12.2 循环
12.2.1 while循环
12.2.2 for循环
12.3 编译exit语句
12.4 case语句
12.5 编译goto语句
12.6 异常处理
12.7 短路计算布尔表达式
12.7.1 单地址短路计算
练习
第13章 翻译过程和函数
13.1 简单子程序
13.1.1 声明无参子程序
13.1.2 调用无参过程
13.2 向子程序传递参数
13.2.1 值、结果和值-结果参数
13.2.2 引用和只读参数
13.2.3 处理参数声明的语义例程
13.3 处理子程序调用和参数表
13.4 子程序调用
13.4.1 保存和恢复寄存器
13.4.2 子程序的入口和出口
13.5 标号参数
13.6 名字参数
练习
第14章 属性文法和多遍翻译
14.1 属性文法
14.1.1 简单赋值形式和动作符号
14.1.2 树遍历的属性计算程序
14.1.3 直接属性计算程序
14.1.4 属性文法示例
14.2 树结构的中间表示
14.2.1 抽象语法树接口
14.2.2 语法树抽象接口
14.2.3 实现树
练习
第15章 代码生成和局部代码优化
15.1 概述
15.2 寄存器和临时变量管理
15.2.1 临时变量的分类
15.2.2 分配和释放临时变量
15.3 简单的代码生成器
15.4 解释性代码生成
15.4.1 优化地址计算
15.4.2 避免冗余计算
15.4.3 寄存器追踪
15.5 窥孔优化
15.6 从树结构生成代码
15.7 从dag生成代码
15.7.1 别名
15.8 代码生成器的生成器
15.8.1 基于文法的代码生成器
15.8.2 在代码生成器中使用语义属性
15.8.3 生成窥孔优化器
15.8.4 基于树重写的代码生成器的生成器
练习
第16章 全局优化
16.1 概述—目标与限制
16.1.1 理想的优化编译器结构
16.1.2 优化展望
16.2 优化子程序调用
16.2.1 子程序调用的内联展开
16.2.2 优化对封闭子例程的调用
16.2.3 过程间数据流分析
16.3 循环优化
16.3.1 外提循环不变式
16.3.2 循环中强度削弱
16.4 全局数据流分析
16.4.1 单路径流分析
16.4.2 全路径流分析
16.4.3 数据流问题的分类
16.4.4 其他重要的数据流问题
16.4.5 使用数据流信息的全局优化
16.4.6 求解数据流方程
16.5 集成优化技术
练习
第17章 现实世界中的语法分析
17.1 压缩表
17.1.1 压缩LL(1)分析表
17.2 语法错误的恢复与修复
17.2.1 即时错误检测
17.2.2 递归下降分析器中的错误恢复
17.2.3 LL(1)分析器中的错误恢复
17.2.4 FMQ LL(1)错误修复算法
17.2.5 在FMQ修复算法中添加删除操作
17.2.6 FMQ算法的扩展
17.2.7 利用LLGen进行错误修复
17.2.8 LR错误恢复
17.2.9 Yacc中的错误恢复
17.2.10 自动生成的LR修复技术
17.2.11 利用LALRGen进行错误修复
17.2.12 其他LR错误修复技术
练习
附录A Ada/CS语言定义
附录B ScanGen
附录C LLGen用户手册
附录D LALRGen用户手册
附录E LLGen和LALRGen错误修复特性
附录F 编译器开发实用工具
参考文献
索引
::下载地址::
>> 评论