四元式的翻譯(拉鍊回填)
阿新 • • 發佈:2019-01-05
四元式的翻譯(拉鍊回填)
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,,
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需要跳轉的地址才有技術。
應當主義判斷時候的優先順序(邏輯運算):非與或