编译原理问题,求解答
发布网友
发布时间:2022-04-24 08:47
我来回答
共1个回答
热心网友
时间:2022-06-18 04:12
好,我来帮你理解一下,先看基本知识:
四元式是一种比较普遍采用的中间代码形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG@及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。例如a∶=b*c+b*d的四元式表示如下:
(1)(*, b, c, t1)
(2)(*, b, d, t2)
(3)(+, t1, t2, t3)
(4)(∶=,t3, -, a)
四元式和三元式的主要不同在于,四元式对中间结果的引用必须通过给定的名字,而三元式是通过产生中间结果的三元式编号。也就是说,四元式之间的联系是通过临时变量实现的。
有时,为了更直观,也把四元式的形式写成简单赋值形式或更易理解的形式。比如把上述四元式序列写成:
(1)t1∶=b*c
(2)t2∶=b*d
(3)t3∶=t1+t2
(4)a∶=t3
把(jump,-,-,L)写成goto L
把(jrop,B,C,L)写成if B rop C goto L
好,下面分析一下a<b
这是一个表达式,它的结果要么是0,要么是1,因为没有指定这个表达式存放在哪,所以需要一个临时变量来存放它的,在你的问题中,就是T。很显然T有2个值:0或者1
因此,有
101 T:=0 (这个是表达式为假的出口)
103 T:=1 (这个是表达式为真的出口)
因为你的表达式只有一个A<B,因此A<B的真假出口就是表达式的真假出口,所以
100:if a<b goto 103 (a<b为真,跳到真出口103)
101:T:=0(否则,进入假出口)
102:goto 104 (当然要跳过真出口罗,否则T的值不就又进入真出口了,变成真了)
103:T:=1
104:(程序继续执行)