编译原理 赋值语句翻译成四元式

赋值语句及算数表达式的翻译
将赋值语句翻译成四元式的语义描述:
(1) S-> id:=A
(2) A->id
(3) A->int
(4) A->real
(5) A->A1+A2
(6) A->A1A2
(7) A->-A1
(8) A->(A1)
句子 y:=5.1
x+b
S->id:=A{S.code:=A.code||gen(id.place’:='A.place);}
S.code(综合属性) 表示S的四元式语句序列;
A.code(综合属性)表示A的四元式语句序列;
A.place是综合属性,表示存放A的值的存储位置;
id.place表示相应的符号名对应的存储位置;
|| 是四元式语句序列之间的链接运算;
gen是语义函数,用于生成一条四元式语句。

(2) A->id{ A.place:=id.place;
A.code:=" ";
}
(3) A->int{ A.place:=newtemp;
A.code:=gen(A.place ‘:=’ int.val);
}
(4) A->real { A.place:=newtemp;
A.code:=gen(A.place ‘:=’ real.val);
}
newtemp是语义函数,用于在符号表中新建一个从未使用过的名字,并返回该名字的存储位置。

(5) A->A1+A2
{ A.place:= newtemp;
A.code:=A1.code||A2.code||gen(A.place ‘:=’ A1.place’+‘A2.place);
}
(6) A->A1A2
{A.place:=newtemp;
A.code:=A1.code||A2.code||gen(A.place ‘:=’ A1.place '
’ A2.place);
}
(7) A->-A1
{ A.place:=newtemp;
A.code:=A1.code||gen(A.place ‘:=’ ‘umins’ A1.place);
}
(8) A->(A1)
{ A.place:=A1.place;
A.code:=A1.code;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值