編譯原理ppt62_第1頁
編譯原理ppt62_第2頁
編譯原理ppt62_第3頁
編譯原理ppt62_第4頁
編譯原理ppt62_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、編譯器從操作系統(tǒng)獲得存儲區(qū),用于保存:產(chǎn)生的目標代碼數(shù)據(jù)對象記錄過程活動的控制棧的對應(yīng)物棧式分配策略:按棧方式管理運行時的存儲空間1代碼靜態(tài)數(shù)據(jù)棧堆內(nèi)存區(qū)域的典型劃分空閑空間26.2.2 活動樹和運行棧如果a和b是過程的活動,那么它們的生存期或者不交迭,或者嵌套。也就是說,如果在離開a之前進入b,那么控制在離開b之后才能離開a3用活動樹來描繪控制進入和離開活動的方式。在活動樹中:每個節(jié)點代表過程的一個活動根節(jié)點代表主程序的活動當(dāng)且僅當(dāng)控制流從活動a進入活動b時,節(jié)點a是節(jié)點b的父節(jié)點當(dāng)且僅當(dāng)a的生存期先于b的生存期發(fā)生時,a節(jié)點處于b節(jié)點的左邊4program sort(input, outp

2、ut); var a: array 0.10 of integer; procedure readarray; var i: integer; begin for i :=1 to 9 do read(ai) end; function partition(y,z:integer) :integer; var i,j,x,v:integer; begin . end; procedure quicksort(m,n:integer); var i: integer; begin if (nm) then begin i:=partition(m,n); quicksort(m,i-1); qu

3、icksort(i+1,n) end end; begin a0:=-9999; a10:=9999; readarray; quicksort(1,9) end. 5mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)q(2,1)q(3,3)p(2,3)q(5,9)q(5,5)p(5,9)q(7,9)q(7,7)q(9,9)p(7,9)6控制棧程序的控制流對應(yīng)于從活動樹根節(jié)點開始的深度優(yōu)先遍歷用控制棧保存活躍的過程活動。基本思想是:當(dāng)活動開始時,把這個活動的節(jié)點壓入控制棧;當(dāng)這個活動結(jié)束時,彈出這個節(jié)點控制棧的內(nèi)容與到活動樹的根節(jié)點的一條路徑相關(guān)。當(dāng)節(jié)點n在控制棧的棧

4、頂時,棧內(nèi)包含的是從節(jié)點n到根的路徑上的節(jié)點7mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)虛線表示連接的節(jié)點的活動已經(jīng)執(zhí)行完畢實線表示連接的節(jié)點的活動沒有執(zhí)行完畢,需要在控制棧中保存此活動的信息8mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)ma : arrays的活動記錄ri:integerr的活動記錄q(1,9)i:integerq的活動記錄q(1,3)i:integerq的活動記錄p(1,9)i,j,x,v:integerp的活動記錄96.2.3 調(diào)用序列過程調(diào)用是通過在目標代碼中生成調(diào)用序列來實現(xiàn)的調(diào)用序列分配活動記錄,并把

5、信息填入它的域中;返回序列恢復(fù)機器狀態(tài),使調(diào)用過程能夠繼續(xù)執(zhí)行10在過程調(diào)用時執(zhí)行的分配活動記錄,以及把信息填入其域中的代碼被稱為過程調(diào)用序列在過程返回時執(zhí)行的恢復(fù)機器狀態(tài),回收活動記錄,以及讓調(diào)用過程繼續(xù)執(zhí)行的代碼被稱為過程返回序列注:過程調(diào)用序列、過程返回序列和活動記錄的布局會因?qū)崿F(xiàn)而異;過程調(diào)用序列和過程返回序列的代碼常分為兩個部分,分處于調(diào)用過程和被調(diào)用過程11設(shè)計原則調(diào)用者和被調(diào)用者之間交流的數(shù)據(jù)一般放在被調(diào)用者活動記錄的開始處,并盡可能靠近調(diào)用者的活動記錄固定長度的項通常放在活動記錄的中間,一般包括控制鏈、訪問鏈和機器狀態(tài)域在編譯時不能及時知道大小的一些項放在活動記錄的末端12寄存

6、器top_sp指向活動記錄中機器狀態(tài)域的末端寄存器base_sp指向棧頂活動記錄中控制鏈所在的位置,它作為訪問棧頂活動記錄中內(nèi)容的基地址調(diào)用序列調(diào)用者計算實參調(diào)用者把返回地址和top_sp的舊值存入被調(diào)用者的活動記錄中。然后調(diào)用者調(diào)整top_sp值被調(diào)用者保存寄存器值和其他機器狀態(tài)信息被調(diào)用者初始化其局部數(shù)據(jù),并開始執(zhí)行13參數(shù)和返回值控制鏈鏈和保存的狀態(tài)參數(shù)和返回值臨時變量和局部變量控制鏈鏈和保存的狀態(tài)臨時變量和局部變量top_sp調(diào)用者的任務(wù)被調(diào)用者的任務(wù)調(diào)用者的活動記錄被調(diào)用者的活動記錄14可能的返回序列被調(diào)用者將返回值放入鄰近調(diào)用者的活動記錄的地方利用狀態(tài)域的信息,被調(diào)用者恢復(fù)top_sp和其他寄存器,并且按調(diào)用者代碼中的返回地址返回盡管top_sp的值減少了,但調(diào)用者可以將返回值復(fù)制到自己的活動記錄中,并用它來計算一個表達式156.2.4 棧上可變長數(shù)據(jù)處理變長數(shù)據(jù)的常用策略:在活動記錄中并不存儲這些數(shù)據(jù),只保存指向這些數(shù)據(jù)起始位置的指針16控制鏈指向A的指針指向B的指針指向C的指針控制鏈base_sptop_spp的活動記錄p的數(shù)組q的數(shù)組被p調(diào)用的過程q的活動記

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論