




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Pl/0語言文法的BNF表示:程序分程序>.分程序 <常量說明部分><變量說明部分><過程說明部分>語句 <常量說明部分> CONST<常量定義> ,<常量定義>; <常量定義> <標識符>=<無符號整數(shù)> <無符號整數(shù)> <數(shù)字><數(shù)字> <變量說明部分> VAR<標識符> ,<標識符>; <標識符> <字母><字母>|<數(shù)字> <過和說明部分> &
2、lt;過程首部><分程度>;<過程說明部分> <過程首部> procedure<標識符>; <語句> <賦值語句>|<條件語句>|<當型循環(huán)語句>|<過程調(diào)用語句>|<讀語句>|<寫語句>|<復(fù)合語句>|<空> <賦值語句> <標識符>:=<表達式> <復(fù)合語句> begin<語句> ;<語句><end> <條件> <表達式>&
3、lt;關(guān)系運算符><表達式>|ood<表達式> <表達式> +|-<項><加減運算符><項> <項> <因子><乘除運算符><因子> <因子> <標識符>|<無符號整數(shù)>|(<表達式>) <加減運符> +|- <乘除運算符> *|/ <關(guān)系運算符> =|#|<|<=|>|>= <條件語句> if<條件>then<語句> <
4、過程調(diào)用語句> call<標識符> <當型循環(huán)語句> while<條件>do<語句> <讀語句> read(<標識符> ,<標識符>) <寫語句> write(<標識符>,<標識符>) <字母> a|b|cx|y|z <數(shù)字> 0|1|27|8|9一 為PL/0語言建立一個詞法分程序GETSYM(函數(shù))把關(guān)鍵字、算符、界符稱為語言固有的單詞,標識符、常量稱為用戶自定義的單詞。為此設(shè)置三個全程量:SYM,ID,NUM 。 SYM:存放每個單詞的類別
5、,為內(nèi)部編碼的表示形式。 ID:存放用戶所定義的標識符的值,即標識符字符串的機內(nèi)表示。 NUM:存放用戶定義的數(shù)。 GETSYM要完成的任務(wù):1. 濾掉單詞間的空格。2. 識別關(guān)鍵字,用查關(guān)鍵字表的方法識別。當單詞是關(guān)鍵字時,將對應(yīng)的類別放在SYM中。如IF的類別為IFSYM,THEN的類別為THENSYM。3. 識別標識符,標識符的類別為IDENT,IDRNT放在SYM中,標識符本身的值放在ID中。關(guān)鍵字或標識符的最大長度是10。4. 拼數(shù),將數(shù)的類別NUMBER放在SYM中,數(shù)本身的值放在NUM中。5. 拼由兩個字符組成的運算符,如:>=、<=等等,識別后將類別存放在SYM中。
6、6. 打印源程序,邊讀入字符邊打印。由于一個單詞是由一個或多個字符組成的,所以在詞法分析程序GETSYM中定義一個讀字符過程GETCH。二 為PL/0語言建立一個語法分析程序BLOCK(函數(shù))PL/0編譯程序采用一遍掃描的方法,所以語法分析和代碼生成都有在BLOCK中完成。BLOCK的工作分為兩步:a) 說明部分的處理說明部分的處理任務(wù)就是對每個過程(包括主程序,可以看成是一個主過程)的說明對象造名字表。填寫所在層次(主程序是0層,在主程序中定義的過程是1層,隨著嵌套的深度增加而層次數(shù)增大。PL/0最多允許3層),標識符的屬性和分配的相對地址等。標識符的屬性不同則填寫的信息不同。所造的表放在全
7、程量一維數(shù)組TABLE中,TX為指針,數(shù)組元素為結(jié)構(gòu)體類型數(shù)據(jù)。LEV給出層次,DX給出每層的局部量的相對地址,每說明完一個變量后DX加1。例如:一個過程的說明部分為: const a=35,b=49; var c,d,e; procedure p;var g;對它的常量、變量和過程說明處理后,TABLE表中的信息如下:TX0 TX1 NAME: aNAME: bNAME: cNAME: dNAME: eNAME: pKIND: CONSTANTKIND: CONSTANTKIND: VARIABLEKIND: VARIABLEKIND: VAEIABLEKIND: PROCEDUREVAL:
8、 35VAL: 49LEVEL: LEVLEVEL: LEVLEVEL: LEVLEVEL: LEVADR: DXADR: DX+1ADR: DX+2ADR: NAME: g。KIND: VARIABLE 。 。 。LEVEL: LEV+1。ADR: DX。 。對于過程名的ADR域,是在過程體的目標代碼生成后返填過程體的入口地址。TABLE表的索引TX和層次單元LEV都是以BLOCK的參數(shù)形式出現(xiàn),在主程序調(diào)用BLOCK時實參的值為0。每個過程的相對起始位置在BLOCK內(nèi)置初值DX=3。2語句處理和代碼生成 對語句逐句分析,語法正確則生目標代碼,當遇到標識符的引用則去查TABLE表,看是否有過
9、正確的定義,若有則從表中取出相關(guān)的信息,供代碼生成用。PL/0語言的代碼生成是由過程GEN完成。GEN過程有三個參數(shù),分別代表目標代碼的功能碼、層差、和位移量。生成的目標代碼放在數(shù)組CODE中。CODE是一維數(shù)組,數(shù)組元素是結(jié)構(gòu)體類型數(shù)據(jù)。PL/0語言的目標指令是一種假想的棧式計算機的匯編語言,其格式如下:f l a其中f代表功能碼,l代表層次差,a代表位移量。目標指令有8條: LIT:將常數(shù)放到運棧頂,a域為常數(shù)。 LOD:將變量放到棧頂。a域為變量在所說明層中的相對位置,l為調(diào)用層與說明層的層差值。 STO:將棧頂?shù)膬?nèi)容送到某變量單元中。a,l域的含義與LOD的相同。 CAL:調(diào)用過程的指
10、令。a為被調(diào)用過程的目標程序的入中地址,l為層差。 INT:為被調(diào)用的過程(或主程序)在運行棧中開辟數(shù)據(jù)區(qū)。a域為開辟的個數(shù)。 JMP:無條件轉(zhuǎn)移指令,a為轉(zhuǎn)向地址。 JPC:條件轉(zhuǎn)移指令,當棧頂?shù)牟紶栔禐榉钦鏁r,轉(zhuǎn)向a域的地址,否則順序執(zhí)行。 OPR:關(guān)系和算術(shù)運算。具體操作由a域給出。運算對象為棧頂和次頂?shù)膬?nèi)容進行運算,結(jié)果存放在次頂。a域為0時是退出數(shù)據(jù)區(qū)。三 建立一個解釋執(zhí)行目標程序的函數(shù)編譯結(jié)束后,記錄源程序中標識符的TABLE表已退出內(nèi)存,內(nèi)存中只剩下用于存放目標程序的CODE數(shù)組和運行時的數(shù)據(jù)區(qū)S。S是由解釋程序定義的一維整型數(shù)組。解釋執(zhí)行時的數(shù)據(jù)空間S為棧式計算機的存儲空間。遵
11、循后進先出的規(guī)則,對每個過程(包括主程序)當被調(diào)用時,才分配數(shù)據(jù)空間,退出過程時,則所分配的數(shù)據(jù)空間被釋放。為解釋程序定義四個寄存器:1 I:指令寄存器,存放當前正在解釋的一條目標指令。2 P:程序地址寄存器,指向下一條要執(zhí)行的目標指令(相當于CODE數(shù)組的下標)。3 T:棧頂寄存器,每個過程運行時要為它分配數(shù)據(jù)區(qū)(或稱為數(shù)據(jù) 段),該數(shù)據(jù)區(qū)分為兩部分。靜態(tài)部分:包括變量存放區(qū)和三個聯(lián)單元。動態(tài)部分:作為臨時工作單元和累加器用。需要時臨時分配,用完立即釋放。棧頂寄存器T指出了當前棧中最新分配的單元(T也是數(shù)組S的下標)。4 B:基地址寄存器,指出每個過程被調(diào)用時,在數(shù)據(jù)區(qū)S中給出它分配的數(shù)據(jù)段
12、起始地址,也稱為基地址。每個過程被調(diào)用時,在棧頂分配三個聯(lián)系單元。這三個單元的內(nèi)容分別是:SL:靜態(tài)鏈,它是指向定義該過程的直接外過程運行時數(shù)據(jù)段的基地址。DL:動態(tài)鏈,它是指向調(diào)用該過程前正在運行過程的數(shù)據(jù)段的基地址。RA:返回地址,記錄調(diào)用該過程時目標程序的斷點,即當時的程序地址寄存器P的值。 具體的過程調(diào)用和結(jié)束,對上述寄存器及三個聯(lián)系單元的填寫和恢復(fù)由下列目標指令完成。1 INT 0 aa:為局部量個數(shù)加32 OPR 0 0恢復(fù)調(diào)用該過程前正在運行過程(或主程序)的數(shù)據(jù)段的基地址寄存器的值,恢復(fù)棧頂寄存器T的值,并將返回地址送到指令寄存器P中。3 CAL l aa為被調(diào)用過程的目標程序的入口,送入指令地址寄存器P中。CAL指令還完成填寫靜態(tài)鏈,動態(tài)鏈,返回地址,給出被調(diào)用過程的基地址值,送入基址寄存器B中。 例:一個Pl/0源程序及生成的目標代碼:const a=10;var b,c;procedure p;begin c:=b+aend;2 int 0 33 lod 1 34 lit 0 105 opr 0 26 sto 1 47 opr 0 0begin read(b); while b#0 do begin call p; wr
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化供應(yīng)鏈優(yōu)化升級合作協(xié)議
- 幼兒園親子故事征文猜猜我有多愛你
- 品牌發(fā)展及合作策略表
- 農(nóng)業(yè)智能裝備技術(shù)應(yīng)用知識試題
- 物業(yè)轉(zhuǎn)讓協(xié)議書錦集
- 農(nóng)業(yè)種植基地生產(chǎn)安全管理協(xié)議
- 數(shù)學(xué)故事書奇妙的世界之旅解讀
- 企業(yè)內(nèi)部管理軟件推廣協(xié)議
- 杜甫詩風(fēng)探究:高中語文深度解析教案
- 三農(nóng)田機械作業(yè)技術(shù)標準及規(guī)范
- 《5G無線網(wǎng)絡(luò)規(guī)劃與優(yōu)化》 課件 第一章 5G網(wǎng)絡(luò)概述
- 醫(yī)院導(dǎo)視系統(tǒng)方案
- 教科版-六年級科學(xué)下冊制作校園生物分布圖課件
- 生涯發(fā)展報告介紹職業(yè)發(fā)展規(guī)劃實現(xiàn)職業(yè)目標的具體行動和成果
- 關(guān)于防范遏制礦山領(lǐng)域重特大生產(chǎn)安全事故的硬措施(上)
- 《高一數(shù)學(xué)三角函數(shù)誘導(dǎo)公式》課件
- 納米材料在環(huán)境污染治理中的應(yīng)用
- 2024版全文:中國二型糖尿病防治全指南
- 警惕冒充客服詐騙如何識別和避免客服騙局
- 《中醫(yī)婦科養(yǎng)生》課件
- 學(xué)術(shù)寫作(一)Choosing-a-topic-課件
評論
0/150
提交評論