中間代碼生成
-
中間代碼也與機器無關。
-
常見中間表示形式:
- 逆波蘭式:
逆波蘭式
中綴表達式轉逆波蘭式:按照算術表達式的計算順序 根據操作數1、(操作數2)、運算符的順序化成一個部分的后綴式,將這個后綴式在算術表達式中看成一個操作數繼續按照上面方法分析。
逆波蘭式轉中綴表達式:根據逆波蘭式的序列從左向右找運算符,找到后從這個運算符開始向前找出緊鄰的操作數2、操作數1並化成算術表達式,將這個算術表達式看成一個操作數,繼續往后尋找操作符,重復以上步驟。
注意:操作數均由一個字母表示。
-
抽象語法樹AST:
抽象語法樹中每一個子樹的根結點都對應一種動作或運算,它的所有子結點對應該動作或運算的參數或運算數。
參數或運算數也可以是另一子樹,代表另一動作或運算。將AST中相同的子樹合並,這種改進的AST叫做有向無環圖DAG;
AST與DAG
-
三地址碼TAC
x=y op z
或者四元組的形式(op,y,z,x)
TAC
其他TAC語句
-
常用語句的語法制導翻譯 :
語義過程GEN表示產生一個TAC或四元式,並且填入TAC或四元式表中。
語義過程Newtemp表示生成一個臨時變量,每調用一次,生成一新的臨時變量。
語義變量E. place,用來存放 E 的值的存儲位置。
語義變量id.place , id 對應的存儲位置。- 簡單賦值語句的翻譯 :
賦值語句
-
布爾表達式的翻譯 :
布爾表達式
拉鏈與回填:
拉鏈與回填
=拉鏈與回填