編譯原理 第八章 源程式的中間形式

2022-07-11 13:30:12 字數 1973 閱讀 9104

目錄一般編譯程式都生成中間**,然後再生成目標**。

優點是:可移植(與具體目標程式無關) 且易於**優化

字尾表示式

由中綴表示式翻譯為波蘭表示演算法較容易實現。構造乙個類似演算法優先分析法的演算法即可。

波蘭表示法

優點:缺點:

如:if 語句的波蘭表示

:的頭乙個符號

:乙個緊跟在後面的符號

bz:二目操作符。若expr結果為false,則產生乙個的轉移

br:一目操作符。產生乙個的轉移。

在該表示中,每條指令由 n 個域所組成,通常第乙個域表示操作符,其餘為運算元。

常用的n元表示是:三元式、四元式

三元式

條件語句的三元式:

其中:br:一元操作符,按第3個域做無條件轉移

三元式的缺點:

不便於**優化。

由於優化要刪除一些三元式,或對某些三元式的位置要進行變更。三元式的結果(編號)也是某個三元式的運算元,隨著三元式位置的變更也應作相應的修改。

間接三元式

便於在三元式上做優化處理。核心為將執行順序與三元式編號分離,這樣在優化時三元式可以不變,而僅僅改變其執行順序表。

相當於三元式會寫下所有操作,例如在優化時要去掉所有的重複三元式。而在間接三元式中不出現重複的三元式,轉而用操作代表重複操作。這樣就利於**優化。

四元式表示

通常是編譯時分配的臨時變數,可由編譯程式分配乙個暫存器或主存單元。

其中t1~t4為臨時變數。用四元式優化比較方便

既然是「抽象機」,就是表示它並不是實際的物理目標機器而通常是虛擬的一台「堆疊計算機」。該堆疊式計算機主要由若干暫存器乙個儲存程式指令的儲存器和乙個堆疊式資料及操作儲存組成。

暫存器有:

執行p-code的抽象機沒有專門的運算器或累加器,所有的運算(操作)都在執行棧的棧頂進行。

例:進行 d:=(a+b)*c的運算,生成p-code序列(實際上是波蘭表示形式的中間**)

中間**生成例項——翻譯成字尾式

死**原因:由於在if的stm1中有一句goto l 因此若滿足初始條件k>i+j,就會一直進入此"迴圈",直到不滿足到else語句。因此j 29永遠不會執行到。

第八章 子程式

一 定義 子程式即執行乙個特殊任務的一段分離的 它可以使減少重複 且使程式易讀。perl中,子程式可以出現在程式的任何地方。定義方法為 subsubroutine 二 呼叫 呼叫方法如下 1 用 呼叫 subname sub subname 2 先定義後呼叫 可以省略 符號 subsubname s...

第八章 類的高階

訪問修飾符 公開訪問 用pbulic關鍵字。受保護訪問 用protected關鍵字。預設訪問 沒有訪問。私有訪問 用private關鍵字。封裝 組裝,累的定義 屬性和行為 資訊隱藏 1.訪問修飾符public protected 預設 private 2.方法的實現 呼叫者無需知道方法的具體步驟,只...

第八章 雲計算原理與技術

8.雲計算原理與技術 8.1雲計算概述 對一般使用者而言 雲計算是指通過網路以按需 易擴充套件的方式獲得所需的服務。即隨時隨地只要能上網就能使用各種各樣的服務,如同錢莊 銀行 發電廠等。這種服務可以是it和軟體 網際網路相關的,也可以是任意其他的服務。對專業人員而言 是分布式處理 並行處理和網格計算...