第7章 语义分析与中间代码生成
7.1 中间代码
- 作用:经语义分析翻译成中间代码序列
- 优点:形式简单、语义明确、独立于目标语言;便于编译系统的实现、移植、代码优化
- 中间代码的形式:抽象语法树,逆波兰表示,三地址码,DAG图表示
逆波兰表示
- 后缀表示法:表达式的运算顺序就是运算符出现的顺序
三地址码
- 每条指令最多只能包含三个地址,即两个操作数地址和一个结果地址
四元式
三元式
DAG 有向无环图
7.2 声明语句的翻译
7.4 类型检查(略)
语法分析(syntax analysis) 是编译程序的核心部分,其任务是检查词法分析器输出的单词序列是否是源语言中的句子
第10章 代码优化
重点:代码优化的任务,局部优化、循环优化、全局优化的基本方法
- 代码优化:对程序进行等价变换,提高目标程序的效率,通常只对中间代码进行优化
优化的种类
- 按 机器相关性 划分:
- 机器相关优化
寄存器优化、多处理器优化、特殊指令优化、无用指令消除等 - 机器无关优化
- 机器相关优化
- 按 优化语言级 划分:
- 针对中间代码
- 针对机器语言
代码优化方法
- 公共子表达式删除
- 复制传播
- 无用代码删除
- 代码外提
- 强度削弱
局部优化
局部优化:以程序的基本块为基础,基本块内的优化
- 利用DAG(有向无环图)进行基本块变换
① 局部公共子表达式删除
② 无用代码删除
③ 交换两个独立的相邻语句的次序,以便减少某个临时值需要保存在寄存器中的时间
④ 使用代数规则重新排列三地址码的运算对象的顺序,以便简化计算过程
- 循环优化
- 循环不变计算的检测
- 代码外提
- 归纳变量删除 和 强度削弱
- 全局优化:跨基本块的优化
- 全局公共子表达式的删除
- 复制传播