编译原理--中间代码生成

本文详细介绍了编译原理中的中间代码生成,包括DAG和三地址代码的概念及其优化,如无条件转移、条件转移指令。此外,还讨论了声明语句、表达式和赋值语句、控制流(如if、while、switch语句)、过程调用的翻译策略,以及回填技术在布尔表达式控制流中的应用。
摘要由CSDN通过智能技术生成

基础

DAG

语法树是一种图形化的中间表示。但语法树中,公共子表达式每出现一次,就有一个对应的子树,产生了大量冗余,
因此定义了另一种中间表示:有向无环图(Directed Acyclic Graph, DAG)
有向无环图的构造与抽象语法树类似。
在这里插入图片描述

三地址代码

一般包括一个运算符和之多三个运算分量(地址),所以叫做三地址代码。这里的地址包括:变量、常量、临时变量。

  • 指令集合
    • 运算/赋值指令:x=y op z ,x = op y
    • 复制指令:x=y
    • 无条件转移指令:goto L
    • 条件转移指令:if x goto L ,ifFalse x goto L
    • 条件转移指令:if x relop y goto L
    • 过程调用/返回 p(x1, x2, …, xn)
      • param x1 //设置参数
      • param x2
      • …
      • param xn
      • call p, n //调用子过程p,n为参数个数
    • 带下标的复制指令:x=y[i] x[i]=y • 注意:i表示离开数组位置第i个字节,而不是数组的第i个元素
    • 地址/指针赋值指令: • x=&y x=*y *x=y

在这里插入图片描述

  • 三地址代码的四元式表示
    格式(字段): op arg1 arg2 result
    如:+ x y z
    对于有些指令,一些参数是空缺的,如
    param x1 null null
    [if goto] x null L
    在这里插入图片描述
  • 三地址代码的三元式表示
    op arg1 arg2
    使用三元式的位置来引用三元式的运算结果
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值