例如布尔表达式a<b or c<d and e>f翻译为如下四元式序列:
 |
例 8.3 |
|
(1) if a<b goto E.true
(2) goto (3)
(3) if c<d goto (5)
(4) goto E.false
(5) is e>f goto E.true
(6) goto E.false
这样生成的四元式显然不是最优的,如四元式(2)是不需要的。这种问题可留待代码优化阶段解决。 |
在例8.3中,我们使用E.true和E.false分别表示整个表达式a<b or c<d and e>f的真、假出口,而E.true和E.false的值并不能在产生四元式的同时就知道。为了看清这一点,我们把该表达式放在条件语句中考虑,如语句
if a<b or c<d and e>f then S1 else S2的四元式序列为
(1) if a<b goto (7) /*(7)是整个布尔表达式的真出口*/
(2) goto (3)
(3) if c<d goto (5)
(4) goto (p+1) /*(p+1)是整个布尔表达式的假出口*/
(5) if e>f goto (7)
(6) goto (p+1)
(7) (关于S1的四元式)
…
(p) goto (q)
(p+1) (关于S2的四元式)
…
(q) |