四元式
四元式是一種更接近目的碼的中間程式碼形式。由於這種形式的中間程式碼便於最佳化處理,因此,在許多編譯程式中得到了廣泛的應用。
四元式實際上是一種“三地址語句”的等價表示。它的一般形式為:
(op,arg1,arg2,result)
其中, op為一個二元 (也可是一元或零元)運算子;arg1,arg2分別為它的兩個運算 (或操作)物件,它們可以是變數、常數或系統定義的臨時變數名;運算的結果將放入result中。四元式還可寫為類似於PASCAL語言賦值語句的形式:
result ∶= arg1 op arg2
需要指出的是,每個四元式只能有一個運算子,所以,一個複雜的表示式須由多個四元式構成的序列來表示。例如,表示式A+B*C可寫為序列
T1∶=B*C
T2∶=A+T1
其中,T1,T2是編譯系統所產生的臨時變數名。當op為一元、零元運算子 (如無條件轉移)時,arg2甚至arg1應預設,即result∶=op arg1或 op result ;對應的一般形式為:
(op,arg1,,result)
或
(op,,,result)
在實際產生的四元式中,op往往用一整型數表示 (運算子的程式碼),它可能附帶有不止一種屬性。例如,加運算可以分為定點加法和浮點加法兩種,我們可用不同的整數值區分這兩種加法。至於四元式中運算物件arg1、arg2和結果域result,它們可以是指向符號表中某項的指示字,也可以是某個臨時變數的序號,因此,在實際的翻譯過程中,還需要進行相應的查填符號表工作。在本章中,由於我們只作原理性討論,所以假定臨時變數來自一個用之不竭的集合,而不去追求其經濟性。
四元式
四元式是一種更接近目的碼的中間程式碼形式。由於這種形式的中間程式碼便於最佳化處理,因此,在許多編譯程式中得到了廣泛的應用。
四元式
四元式實際上是一種“三地址語句”的等價表示。它的一般形式為:
(op,arg1,arg2,result)
其中, op為一個二元 (也可是一元或零元)運算子;arg1,arg2分別為它的兩個運算 (或操作)物件,它們可以是變數、常數或系統定義的臨時變數名;運算的結果將放入result中。四元式還可寫為類似於PASCAL語言賦值語句的形式:
result ∶= arg1 op arg2
需要指出的是,每個四元式只能有一個運算子,所以,一個複雜的表示式須由多個四元式構成的序列來表示。例如,表示式A+B*C可寫為序列
T1∶=B*C
T2∶=A+T1
其中,T1,T2是編譯系統所產生的臨時變數名。當op為一元、零元運算子 (如無條件轉移)時,arg2甚至arg1應預設,即result∶=op arg1或 op result ;對應的一般形式為:
(op,arg1,,result)
或
(op,,,result)
在實際產生的四元式中,op往往用一整型數表示 (運算子的程式碼),它可能附帶有不止一種屬性。例如,加運算可以分為定點加法和浮點加法兩種,我們可用不同的整數值區分這兩種加法。至於四元式中運算物件arg1、arg2和結果域result,它們可以是指向符號表中某項的指示字,也可以是某個臨時變數的序號,因此,在實際的翻譯過程中,還需要進行相應的查填符號表工作。在本章中,由於我們只作原理性討論,所以假定臨時變數來自一個用之不竭的集合,而不去追求其經濟性。