1. 程式人生 > >四元式的翻譯(拉鍊回填)

四元式的翻譯(拉鍊回填)

四元式的翻譯(拉鍊回填)

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需要跳轉的地址才有技術。
應當主義判斷時候的優先順序(邏輯運算):非與或