四元式的翻译(拉链回填)
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的四元式序列
解:
- (jnz, A,_,0)->5
- (j,_,_,0) ->3
- (j<,B,D,0)->1->5
- (j,_,_,0)->7
- S1
- (j,_,_,0)->8
- S2
- …
2.2 题目
While (A∨B) do
if ^ (C∧D) then x=x+2
else y=y*3;
解:
- (jnz, A,_,0)->5
- (j,_,_,0) ->3
- (j<,B,D,0)->1->5
- (j,_,_,0)->15
- (jnz,C,_,0)->7
- (j,_,_,0)->9
- (jnz,D,_,0)->12
- (j,_,_,0)->6->9
- (+,x,2,T1)
- (=,T1,_,x)
- (j,_,_,0)->1
- (*,y,3,T2)
- (=,T2,_y)
- (j,_,_,0)->1
至此,结束。拉链回填应该是为了得到if或者while需要跳转的地址才有技术。
应当主义判断时候的优先级(逻辑运算):非与或