编译原理 4 - 语义分析、中间代码生成、代码优化、代码生成

文章探讨了编译器设计中的语义分析阶段,包括中间代码生成如逆波兰表示、三地址码、四元式和DAG图。强调了中间代码在编译系统中的重要性,以及代码优化的各种策略,如局部优化、循环优化和全局优化,旨在提高目标程序的效率。
摘要由CSDN通过智能技术生成


第7章 语义分析与中间代码生成

7.1 中间代码

  • 作用:经语义分析翻译成中间代码序列
  • 优点:形式简单、语义明确、独立于目标语言;便于编译系统的实现、移植、代码优化
  • 中间代码的形式抽象语法树逆波兰表示三地址码DAG图表示

逆波兰表示

  • 后缀表示法:表达式的运算顺序就是运算符出现的顺序
    在这里插入图片描述

三地址码

  • 每条指令最多只能包含三个地址,即两个操作数地址和一个结果地址
    在这里插入图片描述

四元式

在这里插入图片描述

三元式

在这里插入图片描述

DAG 有向无环图

在这里插入图片描述

7.2 声明语句的翻译

在这里插入图片描述

7.4 类型检查(略)

语法分析(syntax analysis) 是编译程序的核心部分,其任务是检查词法分析器输出的单词序列是否是源语言中的句子

第10章 代码优化

重点:代码优化的任务,局部优化、循环优化、全局优化的基本方法

  • 代码优化:对程序进行等价变换,提高目标程序的效率,通常只对中间代码进行优化

优化的种类

  • 机器相关性 划分:
    • 机器相关优化
      寄存器优化、多处理器优化、特殊指令优化、无用指令消除等
    • 机器无关优化
  • 优化语言级 划分:
    • 针对中间代码
    • 针对机器语言

代码优化方法

  • 公共子表达式删除
  • 复制传播
  • 无用代码删除
  • 代码外提
  • 强度削弱

局部优化

局部优化:以程序的基本块为基础,基本块内的优化

  • 利用DAG(有向无环图)进行基本块变换
    ① 局部公共子表达式删除
    ② 无用代码删除
    ③ 交换两个独立的相邻语句的次序,以便减少某个临时值需要保存在寄存器中的时间
    ④ 使用代数规则重新排列三地址码的运算对象的顺序,以便简化计算过程

  • 循环优化
    • 循环不变计算的检测
    • 代码外提
    • 归纳变量删除 和 强度削弱

  • 全局优化:跨基本块的优化
    • 全局公共子表达式的删除
    • 复制传播

第11章 代码生成 略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值