编译原理——求后缀表达式、三元式、四元式

一、求后缀表达式

可能就是一填空题,考试应该也不会太复杂,要会,掌握着由外到内求解思想即可;
在这里插入图片描述
其实就是二叉树的后序遍历,左右根;拆分的顺序就是由左到右顺序进行,小括号内的最后拆(由外到内);
在这里插入图片描述
在这里插入图片描述
后面三道的具体步骤就不写了;
在这里插入图片描述

在这里插入图片描述

二、求三元式

三元式的拆分求解顺序和后缀表达式相反,由内到外
三元式的形式(运算符,参数1,参数2)
在这里插入图片描述

1.三元式:

  1. 三元式的求解过程是由内到外,然后右左向右,可以发现先拆小括号里面,然后再按顺序向右求解;
  2. 盯着三元式的形式去填(运算符,参数1,参数2),参数当然也可以是一个三元式,比如(2)的第一个参数就是(1);变负数有点特殊,操作符是@,然后第一个参数就是想变负数的参数,第三个参数为空,画一条线即可;
    在这里插入图片描述

2.间接三元式:

间接三元式其实就是对三元式做一个小改动,通过上图可以发现 (1)、(5)其实是一样的,所以可以把(5)删去,下面用到(5)的可以替换为(1)

在这里插入图片描述

三、求四元式

四元式的形式(运算符,参数1,参数2,运算结果(临时变量名))

1. 根据表达式写四元式

以上题的表达式为例,写出其四元式
在这里插入图片描述
同理也是盯着四元式的形式(运算符,参数1,参数2,运算结果(临时变量名))去写,和三元式不一样的就是多一列,多了一个运算结果,其实就是个变量,所以他叫四元式;然后三元式引用的(x)换成Tx;别的都一样,
在这里插入图片描述

2. 根据代码写四元式(重点)

普通四元式的形式(运算符,参数1,参数2,下一步跳转的地址编号),对于赋值操作的四元式形式:(运算符,参数1,参数2,临时变量);每个四元式的前面有一个地址编号,用于跳转用;
考试要考,要会做!

例题1

在这里插入图片描述

  1. 赋值操作比较特殊,有三步,第一步是进行运算结果存入T,第二步是把运算结果T赋值给想赋值的变量C,第三步就是下一步跳转的地址编号;
  2. 和上面表达式写的四元式有点不同的是,运算符前面加了个 jj就是跳转指令;然后第四列的表示含义不同:赋值操作时(运算符为±*/、:=)第四列和上面的四元式一样,表示变量;其他操作时第四列表示下一步跳转的地址编号
  3. 可以发现,四元式对于每一个条件都是成对出现的,当满足某个条件,进行操作后,第四列存储执行完当前操作后的,下一步跳转的地址编号;
  4. 这里看的答案解析给的是0,默认当做程序跳出;下面一道题,用一种新的写法,对加一个四元式当做程序出口;
    在这里插入图片描述
例题2

在这里插入图片描述

  1. 地址为109的表示程序出口,上题默认用的0,感觉还是这种写法比较好;
  2. 需要注意当while后面的C>0没满足时,直接结束程序,而不是再跳到if(A<X),按照正常的程序执行流程来想就可以;上一题是因为,开头就是个While,所以下面的if、else执行完还要跳到程序开始;
  3. 视频讲解参考:编译原理程序段翻译成四元式序列
    在这里插入图片描述
例题3

在这里插入图片描述
可参考:【编译原理】:如何将控制语句翻译成四元式
在这里插入图片描述

  • 35
    点赞
  • 286
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向上的yyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值