编译原理 杨明明 2018-12-05 1,008 阅读3分钟 目录 概述 1 引论 1.1 语言处理器 1.2 一个编译器的结构 1.3 程序设计语言的发展历程 1.4 构建一个编译器的相关科学 1.5 便以技术的应用 1.6 程序设计语言基础 1.7 总结 2 一个简单的语法制导翻译器 2.1 引言 2.2 语法定义 2.3 文法定义 2.4 推导 2.5 语法制导翻译 2.6 语法分析 2.7 简单的表达式翻译器 2.8 词法分析 2.9 符号表 2.10 生成中间代码 2.11 总结 3 词法分析 3.1 语法分析器的作用 3.2 输入缓冲 3.3 词法单元的规约 3.4 词法单元的识别 3.5 词法分析生成器 3.6 有穷自动机 3.7 从正则表达式到自动机 3.8 词法分析生成工具的设计 3.9 基于 DFA 的模式匹配器的优化 3.10 总结 4 语法分析 4.1 引论 4.2 上下文无关文法 4.3 设计文法 4.4 自顶向上的语法分析 4.5 LR 语法分析技术介绍:简单 LR 技术 4.6 更强大的 LR 语法分析器 4.7 使用二义性文法 4.8 语法分析器生成工具 4.9 总结 5 语法制导的翻译 语法制导的定义 SDD 的求值顺序 语法制导翻译的应用 语法制导的翻译方案 实现 L 属性的 SDD 边扫描边生成代码 总结 6 中间代码生成 语法制导的变体 三地址代码 类型和声明 类型表达式 表达式的翻译 类型检查 控制流 回填 switch 语句 过程的中间代码 总结 7 运行时刻环境 存储组织 空间的栈式分配 栈中非局部数据的访问 堆管理 垃圾回收概述 基于跟踪的回收的介绍 短停顿垃圾回收 垃圾回收中的高级论题 总结 8 代码生成 代码生成器设计中的问题 目标语言 目标代码中的地址 基本快和流图 后续使用信息 基本块的优化 一个简单的代码生成器 窥孔优化 寄存器分配和指派 通过树重写来选择指令 表达式的优化代码的生成 使用动态规划的代码生成 总结 9 机器无关优化 优化的主要来源 数据流分析简介 数据流分析基础 常量:传播 部分冗余消除 流图中的循环 基于区域的分析 符号分析 总结 10 指令级并行性 处理器体系结构 代码调度约束 基本块调度 全局代码调整 软件流水线化 总结 11 并行性和局部性优化 基本概念 矩阵乘法:一个深入的例子 迭代空间 混合使用符号常量 仿射的数组下标 数据复用 数组数据依赖关系分析 寻找无同步的并行性 并行循环之间的同步 流水线化技术 局部性优化 仿射转换的其他用途 总结 12 过程间分析 基本概念 为什么需要过程间分析 数据流的一种逻辑标示方式 一个简单的指针分析算法 上下文无关的过程间分析 上下文相关指针分析 使用 BDD 的 Datalog 的实现 总结 引论 一个简单的语法制导翻译器 词法分析 语法分析 语法制导的翻译