常用的中间代码

波兰表示(前缀)

对于句子

sum=(10+20)*(num + square);

 将其转换为波兰式,运算符号应在其对应的运算数/符号之前,同时去掉括号。“=”的结果是sum,所以“=”在sum前。再看括号,得到"+ 10 20"和"+ num square"。乘号作用于这两个括号内运算后的结果,于是得到"* + 10 20 + num square"。最后结果为

= sum * + 10 20 + num square

逆波兰表示

对于句子

sum=(10+20)*(num + square);

将其转换为逆波兰式,运算符放到两个运算对象的后面(括号整体也当作一个运算对象),同时去掉括号。“=”作用于sum和右边这整条式子,可得开头为“sum“,结尾为”=“。再看括号得到”10 20 +“和”num + square",又因为乘号作用于两个括号整体,所以得到“10 20 + num + square *"。最后结果为

sum 10 20 + num square + * = 

三元式

对于句子

sum=(10+20)*(num + square);

将其化为三元式,根据先后顺序先算括号。得到

( +,10,20)

(+,num,square)

对式子一和式子二编号,分别为(1),(2)。

最后得到结果

( +,10,20)

(+,num,square)

(*,(1),(2))

(=,sum,(3))

四元式

对于句子

sum=(10+20)*(num + square);

和三元式比较像。每个四元式最多有三个地址(也可以说是三个变量,即只能A=B+C而不会出现A=B+C+D)。

我们用中间变量T_n来代表两数运算结果,得到

\\T_1=10+20 \\ T_2=num+square\\ T_3=T_1*T_2\\ sum=T_3

对于句子

sum=(10+20)*(num + square);

也很简单,叶子节点为变量,对于包含了“=”的等式来说根节点为”=“,根节点的左子树为“=”左边的结果即“sum”。

比较简单,对树进行先序/后序遍历应能得到波兰/逆波兰式。结果为

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值