第六章 中间代码生成

本文详细介绍了编译原理中的中间代码生成,重点讲解了三地址码的格式和类型,包括表达式的翻译、数组元素寻址、条件表达式中的短路现象以及回填(backpatching)的概念和应用。通过对三地址码的理解,阐述了如何在没有while/for等循环语句的情况下,利用汇编中的goto实现循环控制,并探讨了回填在确定控制流语句标签时的作用。

三地址码

格式:
x = y op z
三地址码的右边只能有一个操作符
每个三地址码语句包含三个地址:两个是操作数,一个是结果

三地址码的类型:
在这里插入图片描述
最后三行是函数

注意:只有if、goto语句,不存在while/for等循环语句。
汇编里实现循环通过goto跳转。

变址访问:
在这里插入图片描述
y表示开始地址,i表示偏移量
注意:在三地址码中,不允许出现x[j] = y[i],这就变成四地址码了。

将x=y+2*2转换成三地址码:
	t1 = 2 * 2
	t2 = y + t1
	x = t2
将如下代码转换成三地址码:
i = 1;
a = 0;
while(i <= 10) {
  a = a + 1;
  i = i + 1;
}
转换结果:
i = 1
a = 0
L1: t1 = (i <= 10)
    if(t1 == 0) goto L2
    t2 = a + 1
    a = t2
    t3 = i + 1
    i = t3
    goto L1
L2

表达式的翻译

表达式中的运算

表达式的三地址码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值