四元式的翻译(拉链回填)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Greepex/article/details/80783751

四元式的翻译(拉链回填)

1.定义

四元式实际上是一种“三地址语句”的等价表示。它的一般形式为:
(op,arg1,arg2,result);
布尔式的四元式序列形式如下:

  • (jnz, A, _ , p): 若A为真转第p个四元式
  • (jez, A, _ , p): 若A为假转第p个四元式
  • (jrop ,A1,A2,p): 若的A1 rop A2关系为真转
  • (j,_ , _ , p): 无条件转第p个四元式
    其中,无条件跳转一般是在if或者while的假出口

2.拉链回填

2.1 题目

if A∨B<D
then S1
else S2的四元式序列

解:
1. (jnz, A,_,0)->5
2. (j,,,0) ->3
3. (j<,B,D,0)->1->5
4. (j,,,0)->7
5. S1
6. (j,,,0)->8
7. S2
8. ……

2.2 题目

While (A∨B) do
if ^ (C∧D) then x=x+2 
else y=y*3;

解:
1. (jnz, A,_,0)->5
2. (j,,,0) ->3
3. (j<,B,D,0)->1->5
4. (j,,,0)->15
5. (jnz,C,_,0)->7
6. (j,,,0)->9
7. (jnz,D,_,0)->12
8. (j,,,0)->6->9
9. (+,x,2,T1)
10. (=,T1,_,x)
11. (j,,,0)->1
12. (*,y,3,T2)
13. (=,T2,_y)
14. (j,,,0)->1
15.
至此,结束。拉链回填应该是为了得到if或者while需要跳转的地址才有技术。
应当主义判断时候的优先级(逻辑运算):非与或

猜你喜欢

转载自blog.csdn.net/Greepex/article/details/80783751