編譯原理 學習記錄16 課程完結

2021-10-13 03:57:39 字數 1769 閱讀 6968

允許在過程內部又說明過程(函式和過程,可以統一稱作過程/子程式)

以psacal語言為例,psacal語言的特點如下:

1、最近巢狀作用域原則:乙個名字的作用域是那個包含了這個名字的說明的最小過程或函式

2、過程/函式允許巢狀:允許在乙個過程或函式的內部又說明過程或函式,內層可以引用外層過程中說明的名字

在pascal語言中,子程式呼叫規則如下:

1、外層可以呼叫內層,但不能隔層呼叫

2、內層可以呼叫外層,且可以隔層呼叫

3、任何過程或函式都不能呼叫主程式

4、先說明的過程可以呼叫後說明的過程,但必須加向前引用的說明

過程的活動:過程的一次執行。每執行乙個過程體,就產生該過程的乙個活動

過程的資料區/活動記錄:用於管理過程在一次執行中所需要的資訊所使用的乙個連續的儲存塊

不同程式之間的活動記錄的內容和順序可能有所不同

在編譯階段,編譯程式會組織源程式在執行階段的儲存空間,這些儲存空間包括:使用者定義的變數與常量,臨時工作單元,過程或函式呼叫時需要的連線單元與返回位址,引數傳遞,與作業系統的介面,輸入/輸出所需的緩衝區

在執行階段,隨著目標**的執行,資料的儲存組織形式得以實現

靜態儲存分配

在編譯階段,對源程式中的量分配以固定單元,執行時始終不變

靜態儲存分配要求:

1、程式中的每乙個資料物件的大小,在編譯階段都能夠確定,即不應有可變陣列等可變體積的資料

2、不允許有遞迴等能夠導致每個資料物件在某個時刻存在多個例項的結構

3、資料的性質在執行前就應確定

在靜態儲存分配時,儲存器具有如下結構:

靜態儲存分配,在過程活動結束後,仍能夠保留過程中的區域性量的值

動態儲存分配

有些程式語言的型別是不需要宣告的,這樣的變數所佔儲存空間大小,在編譯時無法確定,屬於動態資料。這些動態資料的儲存分配,在執行階段時動態地進行

動態分配包括棧式儲存分配和堆式儲存分配

在執行階段的儲存空間,在編譯階段都需要進行組織

對於全域性變數而言,在編譯時就可以對映到儲存單元

而對於區域性量而言,只有在過程/函式被呼叫時才會存在。在編譯時,確定每個區域性量占用儲存空間的大小,以及相對於過程/函式資料區首位址的偏移量。同時,也應該對區域性量的位址對齊問題進行考慮

對於具有巢狀結構的程式而言,呼叫時如何訪問非區域性變數,也是乙個需要解決的問題

實在引數(實參)如何與形式引數(形參)相關聯?

在活動記錄中,一般把臨時資料域放在區域性資料域的後面

每呼叫一次過程,就將相應的資料區放置在棧頂,呼叫完後再進行釋放

臨時變數、陣列等特殊量的儲存分配:臨時變數直接在資料區中分配。陣列只在資料區中安排內情向量所需單元,實際分量則安排在執行時分配

巢狀過程之間對非區域性量的訪問:在被呼叫者資料區開闢單元存放巢狀過程間聯絡資訊

其中,控制鏈指向呼叫者的活動記錄。訪問鏈則是在被呼叫過程需要其他地方的某個資料時用來進行定位

巢狀深度的定義:如果乙個過程p在乙個巢狀深度為i的過程中定義,則p的巢狀深度為i+1。在不能巢狀定義的c語言中,所有函式的巢狀深度為1

之前提到的訪問鏈,或者說是靜態鏈,是用來指向其直接外層最新活動記錄的指標

此外,還有乙個巢狀層次顯示表,其本質是指標陣列。這裡面的指標依次指向當前層、直接外層、……,直至最外層(0層,主程式層)等每一層過程的最新活動記錄的首位址

而前面所提到的控制鏈,或者說是動態鏈,則是指向呼叫者活動記錄的首位址

訪問非區域性量時,會根據層差的值,來決定沿著靜態鏈跳轉的次數,從而找到外層中的非區域性量

資料庫系統 學習記錄15 課程完結

事務t的時間戳 ts t 事務t將自己開始的訊息發給排程器的時刻 使用系統clock或維護乙個計數器,都可以對時間戳的生成進行實現 對於每乙個資料庫元素x,都有兩條相關的時間戳以及乙個額外的位 1 rt x 最近一次有事務對x進行讀取的時間戳 2 wt x 最近一次有事務對x進行寫入的時間戳 3 c...

編譯原理 學習記錄4

直接遞迴 呈現出u x uy u rightarrow xuy u xu y形式的文法產生式 間接遞迴 具有u xu yu mathop rightarrow limits xuy u xuy 形式的推導 產生式呈u u yu rightarrow uy u uy 形式如果是經過多步推導得到,則稱之...

編譯原理 學習記錄11

上回,為了解決移進 規約時的幾個問題,引入了幾個定義 短語 設有文法g z w xuy是它的乙個句型,如果有 z xu yz mathop rightarrow limits xuy z xuy 並且u uu mathop rightarrow limits u u u 則稱句型xuy中子串u為句型...