




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章符號(hào)表的組織與管理符號(hào)表(SymbolTable)作用:記錄源程序中各種標(biāo)識(shí)符的屬性和特征等有關(guān)信息。內(nèi)容:名字,有關(guān)信息(種屬、類(lèi)型等)表項(xiàng)的建立:運(yùn)用:語(yǔ)義檢查、產(chǎn)生中間代碼、地址分配的依據(jù)6.1符號(hào)表的作用在編譯的各個(gè)階段,每當(dāng)遇到標(biāo)識(shí)符時(shí),都要查找符號(hào)表。因此,合理組織符號(hào)表,使其占用的存儲(chǔ)空間較少、易于訪(fǎng)問(wèn),對(duì)提高編譯的效率很重要。根據(jù)說(shuō)明語(yǔ)句的功能,記錄標(biāo)識(shí)符的相關(guān)信息為上下文語(yǔ)義的合法性檢查提供依據(jù)生成目標(biāo)代碼時(shí),符號(hào)表的內(nèi)容是分配存儲(chǔ)地址的依據(jù)
符號(hào)表的表項(xiàng)包括名字欄和信息欄查填符號(hào)表一般通過(guò)匹配名字來(lái)實(shí)現(xiàn)。對(duì)符號(hào)表的操作一般有:對(duì)給定的名字,查詢(xún)其是否已在表中;添加新名字;訪(fǎng)問(wèn)某個(gè)名字的某些信息;添加或更新某個(gè)名字的某些信息;刪除一個(gè)或一組無(wú)用的項(xiàng)。6.2符號(hào)表的組織符號(hào)表的內(nèi)容:名字欄、信息欄符號(hào)表的信息欄中記錄了每個(gè)名字的有關(guān)性質(zhì),如類(lèi)型、種屬、大小、以及相對(duì)數(shù)等。不同的程序語(yǔ)言對(duì)于名字性質(zhì)的定義各有不同。一個(gè)名字的有關(guān)信息常常是分幾次填入信息欄中的。符號(hào)表中信息欄的具體組織取決于所翻譯的具體的源語(yǔ)言和目標(biāo)機(jī)器。6.2符號(hào)表的組織直接方式:表中各項(xiàng)各欄的長(zhǎng)度固定。間接方式:符號(hào)表中的相應(yīng)欄存指針,指向存儲(chǔ)具體信息的位置。符號(hào)表NAMEINFORMATION
,6
,4SAMPLELOOP6.2符號(hào)表的組織按標(biāo)識(shí)符的種屬分別建立符號(hào)表。簡(jiǎn)單變量名表數(shù)組名表函數(shù)名表...符號(hào)表信息欄的組織方式:固定信息欄內(nèi)容的符號(hào)表;僅記載信息地址的間接方式。設(shè)置信息欄內(nèi)容時(shí),要考慮標(biāo)識(shí)符的作用域。
符號(hào)表的實(shí)現(xiàn):可采用鏈?zhǔn)奖斫Y(jié)構(gòu):所有的標(biāo)識(shí)符構(gòu)成一個(gè)標(biāo)識(shí)符鏈所有函數(shù)名構(gòu)成一條函數(shù)鏈每個(gè)函數(shù)都有一條函數(shù)參數(shù)鏈每個(gè)函數(shù)都有一條局部變量鏈表單元的具體結(jié)構(gòu)如P140-1416.3符號(hào)表的建立與查找編譯工作的相當(dāng)一大部分時(shí)間是花費(fèi)在查填符號(hào)表上。如何構(gòu)造和處理符號(hào)表?線(xiàn)性表、二叉樹(shù)、Hash表1、線(xiàn)性表實(shí)現(xiàn)最簡(jiǎn)單,節(jié)省空間,效率低按名字出現(xiàn)的順序填寫(xiě)各個(gè)項(xiàng);查找時(shí)可以從表頭順序查找,也可以從表尾反序查找。平均查找時(shí)間n/2改進(jìn)方法:自適應(yīng)線(xiàn)性表2、二分查找與二叉樹(shù)在構(gòu)造表的時(shí)候,各項(xiàng)按名字的“大小”順序排列;查找時(shí)可用對(duì)折法;最長(zhǎng)查找時(shí)間為1+log2N。缺點(diǎn):順序化費(fèi)時(shí)。把符號(hào)表組織成一棵二叉樹(shù)。比對(duì)折查找效率低一點(diǎn)、需要附加的存儲(chǔ)空間,但順序化效率更高。P142圖6.7圖6.83、Hash表與查找使查表與填表都能高效地進(jìn)行。引進(jìn)Hash函數(shù),函數(shù)的構(gòu)造要求:計(jì)算簡(jiǎn)單高效,函數(shù)值分布均勻,有好的解決“地址沖突”的方法。效率與裝填因子有關(guān)。使用Hash表通過(guò)間接方式查填符號(hào)表P143圖6.9第8章運(yùn)行時(shí)的存儲(chǔ)組織與管理在生成目標(biāo)代碼前,需要把程序靜態(tài)的正文和實(shí)現(xiàn)這個(gè)程序的運(yùn)行時(shí)的環(huán)境聯(lián)系起來(lái)。存儲(chǔ)組織與管理:靜態(tài)、動(dòng)態(tài)(棧式、堆式)8.1概述生成目標(biāo)代碼前要進(jìn)行目標(biāo)程序運(yùn)行環(huán)境的設(shè)計(jì)和數(shù)據(jù)空間的分配。運(yùn)行時(shí)的環(huán)境:目標(biāo)計(jì)算機(jī)的存儲(chǔ)器和寄存器結(jié)構(gòu),管理存儲(chǔ)器并保存執(zhí)行過(guò)程所需的信息。3種存儲(chǔ)環(huán)境:完全靜態(tài)、基于棧的、基于堆的目標(biāo)程序運(yùn)行時(shí)所需的存儲(chǔ)空間:程序的各種數(shù)據(jù)對(duì)象的存儲(chǔ)、過(guò)程調(diào)用所需的連接單元、輸入/輸出所需的緩沖區(qū)、保留中間結(jié)果和傳遞參數(shù)的臨時(shí)單元。運(yùn)行時(shí)存儲(chǔ)器的劃分為使目標(biāo)程序能夠運(yùn)行,要從操作系統(tǒng)中獲得一塊存儲(chǔ)空間。并對(duì)這塊空間進(jìn)行劃分,以便存放目標(biāo)代碼、數(shù)據(jù)對(duì)象、棧等。目標(biāo)代碼區(qū)靜態(tài)數(shù)據(jù)區(qū)棧堆用來(lái)管理過(guò)程的活動(dòng)存放動(dòng)態(tài)數(shù)據(jù)
活動(dòng)記錄活動(dòng)記錄(activationrecord):為了管理過(guò)程在一次執(zhí)行中所需要的信息,而使用的一個(gè)連續(xù)的存儲(chǔ)塊。TOPSP參數(shù)空間返回地址局部數(shù)據(jù)的空間局部臨時(shí)變量的空間
存儲(chǔ)分配策略靜態(tài)分配策略:編譯時(shí)對(duì)所有數(shù)據(jù)對(duì)象分配固定的存儲(chǔ)單元,并且在運(yùn)行時(shí)始終保持不變。棧式動(dòng)態(tài)分配策略:在運(yùn)行時(shí)把存儲(chǔ)器作為一個(gè)棧進(jìn)行管理,“先申請(qǐng)后歸還,后申請(qǐng)先歸還”堆式動(dòng)態(tài)分配策略:運(yùn)行時(shí)把存儲(chǔ)器組織成堆結(jié)構(gòu),更便于申請(qǐng)和歸還。按需申請(qǐng)和歸還。
具體采用那種分配策略,取決于程序語(yǔ)言關(guān)于名稱(chēng)的作用域和生存期的定義規(guī)則。8.2靜態(tài)存儲(chǔ)分配在編譯時(shí)就確定目標(biāo)程序運(yùn)行時(shí)的數(shù)據(jù)空間,和每個(gè)數(shù)據(jù)項(xiàng)的單元地址。例如,F(xiàn)ORTRAN語(yǔ)言,適合靜態(tài)分配。靜態(tài)存儲(chǔ)分配是一種非常簡(jiǎn)單的策略。目標(biāo)代碼靜態(tài)數(shù)據(jù)區(qū)P169圖8.48.3棧式存儲(chǔ)分配考慮一種語(yǔ)言:允許過(guò)程的遞歸調(diào)用。(如C)這樣,關(guān)于局部變量的存儲(chǔ)分配,可以直接采用棧式存儲(chǔ)分配策略。把存儲(chǔ)空間組織成一個(gè)棧,運(yùn)行時(shí),每當(dāng)進(jìn)入一個(gè)過(guò)程,就把它的活動(dòng)記錄壓入棧,從而在棧頂形成過(guò)程工作時(shí)的數(shù)據(jù)區(qū);該活動(dòng)結(jié)束時(shí),把它的活動(dòng)記錄彈出棧。過(guò)程的每一次調(diào)用都需要一個(gè)活動(dòng)記錄。8.3.1簡(jiǎn)單棧式存儲(chǔ)分配沒(méi)有分程序結(jié)構(gòu),過(guò)程定義不允許嵌套,但允許過(guò)程的遞歸調(diào)用。該語(yǔ)言可以采用簡(jiǎn)單棧式存儲(chǔ)分配策略。(如C語(yǔ)言)C語(yǔ)言的活動(dòng)記錄C的非局部量可采用靜態(tài)分配策略,編譯時(shí)確定其地址;局部變量和形式參數(shù)運(yùn)行時(shí)在棧上的絕對(duì)地址:
X[SP]=活動(dòng)記錄基地址(SP)+相對(duì)地址臨時(shí)單元內(nèi)情向量簡(jiǎn)單局部變量形式單元參數(shù)個(gè)數(shù)返回地址老SP值TOPSP局部數(shù)據(jù)連接數(shù)據(jù)簡(jiǎn)單棧式存儲(chǔ)分配示例:P的活動(dòng)記錄Main的活動(dòng)記錄全局?jǐn)?shù)據(jù)區(qū)C程序運(yùn)行時(shí)的存儲(chǔ)空間組織TOPSPSP指向現(xiàn)行過(guò)程活動(dòng)記錄的起點(diǎn);TOP始終指向棧頂單元。P170圖8.6圖8.7Intx=2;Voidp(int);Voidq(intn);{…p(n);…}Voidp(intm){…if(m>1){q(m-1);x--;p(m-1);}
…}Main(){p(x);}Q的活動(dòng)記錄P的活動(dòng)記錄TOPSP簡(jiǎn)單棧式存儲(chǔ)分配示例:P的活動(dòng)記錄Main的活動(dòng)記錄全局?jǐn)?shù)據(jù)區(qū)C程序運(yùn)行時(shí)的存儲(chǔ)空間組織SP指向現(xiàn)行過(guò)程活動(dòng)記錄的起點(diǎn);TOP始終指向棧頂單元。P170圖8.6圖8.7Intx=2;Voidp(int);Voidq(intn);{…p(n);…}Voidp(intm){…if(m>1){q(m-1);x--;p(m-1);}
…}Main(){p(x);}Q的活動(dòng)記錄P的活動(dòng)記錄P的活動(dòng)記錄TOPSPC的過(guò)程調(diào)用、過(guò)程進(jìn)入、過(guò)程返回過(guò)程調(diào)用的四元式系列:
parT1……parTncallP,n每個(gè)parTi可以翻譯成目標(biāo)指令:
(i+3)[TOP]=Ti
(傳值)或(i+3)[TOP]=addr(Ti)(傳地址)callP,n翻譯成目標(biāo)指令:
1[TOP]=SP(保存現(xiàn)行SP)
3[TOP]=n(傳送參數(shù)個(gè)數(shù))JSRP(轉(zhuǎn)子指令,轉(zhuǎn)向P的第一條指令)返回值對(duì)應(yīng)指令:return(E)過(guò)程返回時(shí),應(yīng)先執(zhí)行指令:
TOP=SP-1SP=0[SP]X=2[TOP]UJ0[X]轉(zhuǎn)進(jìn)過(guò)程P后,首先應(yīng)執(zhí)行指令:
SP=TOP+1(定義新SP)
1[SP]=返回地址(保護(hù)返回地址)TOP=TOP+L(定義新TOP)L(活動(dòng)記錄的大小)在編譯時(shí)可以靜態(tài)地計(jì)算出來(lái)。8.3.2嵌套過(guò)程語(yǔ)言的棧式存儲(chǔ)分配允許過(guò)程嵌套定義的語(yǔ)言(如Pascal)層數(shù):嵌套的層次主程序的層數(shù)為0直接外層過(guò)程、內(nèi)層過(guò)程層數(shù)作為過(guò)程名的一個(gè)屬性levellevel遇過(guò)程定義開(kāi)始則+1,遇過(guò)程定義結(jié)束則-1對(duì)于Pascal語(yǔ)言,在運(yùn)行時(shí),過(guò)程中的局部變量和形式參數(shù)在棧上的存儲(chǔ)可以用簡(jiǎn)單棧式存儲(chǔ)分配來(lái)解決;但由于允許嵌套,非局部量的訪(fǎng)問(wèn)就比較復(fù)雜。圖8.8程序非局部名字的訪(fǎng)問(wèn)的實(shí)現(xiàn)為了在活動(dòng)記錄中查找非局部名字所對(duì)應(yīng)的存儲(chǔ)單元,過(guò)程運(yùn)行時(shí)必須知道它的所有外層過(guò)程的最新活動(dòng)記錄的地址;由于允許遞歸,過(guò)程的活動(dòng)記錄的位置往往是變動(dòng)的。跟蹤每個(gè)外層過(guò)程的最新活動(dòng)記錄的位置:通過(guò)嵌套層次顯示表(display)嵌套層次顯示表(display)和活動(dòng)記錄引用一個(gè)指針數(shù)組,嵌套層次顯示表:每進(jìn)入一個(gè)過(guò)程后,在建立它的活動(dòng)記錄區(qū)的同時(shí),建立一張display。display的體積在編譯時(shí)可以靜態(tài)確定。非局部量的絕對(duì)地址的計(jì)算:display[靜態(tài)層數(shù)]+相對(duì)地址為便于處理,將display作為活動(dòng)記錄的一部分。臨時(shí)單元內(nèi)情向量局部變量display形參單元參數(shù)個(gè)數(shù)全局display地址返回地址動(dòng)態(tài)鏈(老SP值)TOPSP通過(guò)display訪(fǎng)問(wèn)非局部變量:在現(xiàn)行過(guò)程中引用某一外層過(guò)程(層數(shù)為k)的變量X,變址指令得到X的值。當(dāng)過(guò)程P1調(diào)用過(guò)程P2而進(jìn)入P2后,P2如何建立自己的display表?(若P2的層數(shù)為I2,則其display表含有I2+1項(xiàng))方法:從P1的display表自底向上地取I2項(xiàng),再添上進(jìn)入P2后新建立的SP值,就構(gòu)成了P2的display表。圖8.9、8.10、8.118.4堆式動(dòng)態(tài)存儲(chǔ)分配允許用戶(hù)自由地申請(qǐng)數(shù)據(jù)空間和歸還數(shù)據(jù)空間??臻g被分成許多大小不一的“塊”分配時(shí)必須考慮以下情況:當(dāng)運(yùn)行程序要求一塊體積為N的空間時(shí),分配哪一塊比N大的給它;當(dāng)運(yùn)行程序要求一塊體積為N的空間,沒(méi)有比N大的塊,但所有空閑塊的總和比N大;當(dāng)運(yùn)行程序要求一塊體積為N的空間,但所有空閑塊的總和也不夠N。堆式動(dòng)態(tài)存儲(chǔ)分配的實(shí)現(xiàn)1.定長(zhǎng)塊管理:
初始化時(shí),將堆存儲(chǔ)空間分成長(zhǎng)度相等的若干塊,每塊中指定一個(gè)鏈域。占用占用占用空閑空閑空閑AVAILABLE歸還時(shí),把所歸還的塊插入鏈表。如,插到鏈表頭。占用空閑占用空閑空閑空閑AVAILABLE2.變長(zhǎng)塊管理根據(jù)需要分配長(zhǎng)度不同的存儲(chǔ)塊,初始化時(shí)堆存儲(chǔ)空間是一個(gè)整塊。初次分配時(shí),按需要分割整塊來(lái)分配;歸還時(shí),需要將新歸還的塊與現(xiàn)有空閑塊進(jìn)行合并,不能合并時(shí),鏈成一個(gè)鏈表;再進(jìn)行分配時(shí),從空閑塊鏈表中找出滿(mǎn)足要求的一塊進(jìn)行分配。有多個(gè)滿(mǎn)足要求的塊時(shí),按以下三種策略進(jìn)行分配:(1)首次匹配法:(2)最優(yōu)匹配法:(3)最差匹配法:(2)適用于請(qǐng)求分配的內(nèi)存大小范圍較廣的情況;(3)適用于請(qǐng)求分配的內(nèi)存大小范圍較窄的情況。8.5臨時(shí)變量的存儲(chǔ)分配臨時(shí)變量是編譯時(shí)為暫存中間結(jié)果而引進(jìn)的,對(duì)于代碼優(yōu)化很有好處。都是簡(jiǎn)單變量。如果兩個(gè)臨時(shí)變量名的作用域不相交,則可以共用一個(gè)存儲(chǔ)單元。因此,對(duì)新的臨時(shí)變量名分配存儲(chǔ)單元時(shí),只有當(dāng)它的作用域與所有已分配的臨時(shí)變量的作用域沖突時(shí),才分配一個(gè)新單元。此時(shí),單元的分配信息包括相應(yīng)變量名的作用域。例如,用于暫存表達(dá)式中間結(jié)果的臨時(shí)變量,只存在一次定值和一次引用,并且在定值和引用之間不存在分叉轉(zhuǎn)移。其作用域的確定非常簡(jiǎn)單,因而其存儲(chǔ)分配也可以用一種非常簡(jiǎn)易的辦法(棧)實(shí)現(xiàn)。臨時(shí)變量的棧式地址分配:賦值語(yǔ)句:X=A*B-C*D+E*F四元式序列:四元式臨時(shí)變量名
(1)*ABT1T1(2)*CDT2T2(3)-T1T2T3T3
(4)*EFT4T4(5)+T3T4T5T5(6)=T5XSTACKk對(duì)于引進(jìn)的五個(gè)臨時(shí)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新能源汽車(chē)制造產(chǎn)業(yè)鏈產(chǎn)業(yè)鏈安全風(fēng)險(xiǎn)防控與應(yīng)對(duì)策略報(bào)告
- 文化產(chǎn)業(yè)園產(chǎn)業(yè)集聚與服務(wù)體系構(gòu)建中的文化產(chǎn)業(yè)園區(qū)文化產(chǎn)業(yè)發(fā)展戰(zhàn)略研究與實(shí)踐報(bào)告
- 新零售私域流量運(yùn)營(yíng)的社群運(yùn)營(yíng)策略研究報(bào)告
- 2024年河北省市場(chǎng)監(jiān)督管理局下屬事業(yè)單位真題
- 宣城涇縣鄉(xiāng)村振興發(fā)展有限公司招聘考試真題2024
- 2025年氫能源汽車(chē)產(chǎn)業(yè)鏈關(guān)鍵環(huán)節(jié)-加氫站建設(shè)成本與布局前瞻性研究報(bào)告
- 2025年有色金屬資源循環(huán)利用產(chǎn)業(yè)鏈技術(shù)創(chuàng)新與產(chǎn)業(yè)政策報(bào)告
- 2025年汽車(chē)輕量化材料在汽車(chē)輕量化車(chē)身制造中的研發(fā)成果轉(zhuǎn)化與推廣策略報(bào)告
- 理解西方政治制度的操作性問(wèn)題試題及答案
- 網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)中的關(guān)鍵考量因素試題及答案
- 2025年度老舊小區(qū)改造工程施工合同交底范本
- 2025年福建廈門(mén)市翔安市政集團(tuán)水務(wù)管理有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 江蘇2024年江蘇海事職業(yè)技術(shù)學(xué)院招聘11人(第三批)筆試歷年參考題庫(kù)附帶答案詳解
- 各種奶茶配方資料
- 120與急診交接流程
- 2024-2030年中國(guó)高效節(jié)能無(wú)基礎(chǔ)空壓機(jī)商業(yè)計(jì)劃書(shū)
- 2023-2024學(xué)年廣東省深圳市龍崗區(qū)八年級(jí)(下)期末歷史試卷
- 《電氣與PLC控制技術(shù)》課件-三相異步電動(dòng)機(jī)順序起動(dòng)逆序停止PLC控制
- 【MOOC】健康傳播:基礎(chǔ)與應(yīng)用-暨南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 璞泰來(lái)公司成本費(fèi)用核算制度優(yōu)化設(shè)計(jì)
- 麻醉科建設(shè)發(fā)展規(guī)劃
評(píng)論
0/150
提交評(píng)論