中间语言表示

编译器构成

编译器分为前端和后端:
前端:依赖于源语言,独立于目标机器。包括词法分析器、语法分析器、语义分析器和中间代码生成器。
后端:依赖于目标机器,独立于源语言。包括代码优化器和代码生成器。

中间语言表示

后缀表示

  • 如果 E E E是变量或常数,那么 E E E的后缀表示就是 E E E本身。
  • 如果 E E E是形式为 E 1   o p   E 2 E_1 \ op \ E_2 E1 op E2的表达式,那么 E E E的后缀表示是 E 1 ′   E 2 ′   o p E_1^{\prime}\ E_2^{\prime} \ op E1 E2 op,其中 E 1 ′ E_1^{\prime} E1 E 2 ′ E_2^{\prime} E2分别是 E 1 E_1 E1 E 2 E_2 E2的后缀表示。
  • 如果 E E E是形式为 ( E 1 ) (E_1) (E1)的表达式,那么 E 1 E_1 E1的后缀表示也是 E E E的后缀表示。
  • 后缀表示不需要括号。

?(8 - 4) + 2 的后缀表示是8 4 - 2 +

图形表示

语法树有向无环图DAG

在这里插入图片描述

三地址代码

三地址代码是语法树或DAG的一种线性表示。
一般形式: x : = y   o p   z x := y\ op\ z x:=y op z,其中,如果x不是最终结果,那么x作为临时变量放在活动记录的临时变量区中。
? a : = ( − b + c ∗ d ) + c ∗ d a := (-b + c*d ) + c*d a:=(b+cd)+cd的DAG的三地址代码

t1 = -b;
t2 = c * d;
t3 = t1 + t2;
t4 = t2 + t3;
a = t4;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值