




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第頁共頁廣東工業(yè)大學(xué)編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)報(bào)告課程名稱____編譯原理__________題目名稱_PL/0編譯程序的修改擴(kuò)充_學(xué)生學(xué)院______計(jì)算機(jī)學(xué)院__專業(yè)班級_______________學(xué)號學(xué)生姓名______________指導(dǎo)教師_______________20年月日一、課內(nèi)實(shí)驗(yàn)要求對PL/0作以下修改擴(kuò)充:增加單詞:保留字ELSE,F(xiàn)OR,TO,DOWNTO,RETURN運(yùn)算符*=,/=,++,--,&,||,!修改單詞:不等號#改為增加條件語句的ELSE子句,要求:寫出相關(guān)文法,語法圖,語義規(guī)則。二、實(shí)驗(yàn)環(huán)境與工具計(jì)算機(jī)及操作系統(tǒng):PC機(jī),Windows2000,WindowsXP程序設(shè)計(jì)語言:C教學(xué)型編譯程序:PL/0設(shè)計(jì)方案概述:源、目標(biāo)語言,實(shí)現(xiàn)工具(平臺),運(yùn)行平臺源語言:PASCAL目標(biāo)語言:假想棧式計(jì)算機(jī)的匯編語言,可稱為類PCODE指令代碼實(shí)現(xiàn)工具:VisualC++6.0運(yùn)行平臺:Windows7三、設(shè)計(jì)方案1.結(jié)構(gòu)設(shè)計(jì)說明(1)PL/0語言編譯器PL/0語言可看成是PASCAL語言的子集,它的編譯程序是一個(gè)編譯解釋執(zhí)行系統(tǒng)。PL/0的目標(biāo)程序?yàn)榧傧霔J接?jì)算機(jī)的匯編語言,與具體計(jì)算機(jī)無關(guān)。表格管理函數(shù)PL/0源程序出錯處理函數(shù)目標(biāo)代碼生成程序目標(biāo)代碼生成程序目標(biāo)代碼生成程序目標(biāo)代碼生成程序目標(biāo)代碼生成程序(2)PL/0編譯程序的語法分析過程BLOCK是整個(gè)編譯過程的核心。這里根據(jù)編譯程序的總體流程圖,來弄清BLOCK過程在整個(gè)編譯程序中的作用??偭鞒虉D如下圖所示:啟動置初值程序調(diào)用getsym取單詞分程序調(diào)用block過程語句是否為源程序出錯條件源程序是否有打印錯誤表達(dá)式調(diào)用解釋過程interpret解釋執(zhí)行目標(biāo)執(zhí)行目標(biāo)項(xiàng)因子結(jié)束PL/0語法調(diào)用關(guān)系圖PL/0的編譯程序采用一趟掃描方式,以語法分析程序?yàn)楹诵?,詞法分析程序和代碼生成程序都作為一個(gè)獨(dú)立的過程,當(dāng)語法分析需要讀單詞時(shí)就用詞法分析程序,而當(dāng)語法分析正確需生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。此外,用表格管理程序建立變量,常量和過程標(biāo)識符的說明與引用之間的信息聯(lián)系。用出錯處理程序?qū)υ~法和語法分析遇到的錯誤給出在源程序中出錯的位置和錯誤性質(zhì)。(3)各功能模塊描述過程或函數(shù)名pl0errorgetsymgetchgentestblockenterposition(函數(shù))constdeclarationvardeclaration簡要功能說明主程序出錯處理,打印出錯位置和錯誤編碼詞法分析,讀取一個(gè)單詞漏掉空格,讀取一個(gè)字符生成目標(biāo)代碼,并送入目標(biāo)程序區(qū)測試當(dāng)前單詞符號是否合法分程序分析處理過程登錄名字表查找標(biāo)識符在名字表中的位置常量定義處理變量說明處理listodestatementexpressiontermfactorconditioninterpretbase(函數(shù))列出目標(biāo)代碼清單語句處理表達(dá)式處理項(xiàng)處理因子處理?xiàng)l件處理對目標(biāo)代碼的解釋執(zhí)行程序通過靜態(tài)鏈求出數(shù)據(jù)區(qū)的基地址2、主要成分描述1符號表○為了組成一條指令,編譯程序必須知道其操作碼及其參數(shù)(數(shù)或地址)。這些值是由編譯程序本身聯(lián)系到相應(yīng)標(biāo)識符上去的。這種聯(lián)系是在處理常數(shù)、變量和過程說明完成的。為此,標(biāo)識符表應(yīng)包含每一標(biāo)識符所聯(lián)系的屬性;如果標(biāo)識符被說明為常數(shù),其屬性值為常數(shù)值;如果標(biāo)識符被說明成變量,其屬性就是由層次和修正量(偏移量)組成的地址;如果標(biāo)識符被說明為過程,其屬性就是過程的入口地址及層次。常數(shù)的值由程序正文提供,編譯的任務(wù)就是確定存放該值的地址。我們選擇順序分配變量和代碼的方法;每遇到一個(gè)變量說明,就將數(shù)據(jù)單元的下標(biāo)加一(PL/0機(jī)中,每個(gè)變量占一個(gè)存貯單元)。開始編譯一個(gè)過程時(shí),要對數(shù)據(jù)單元的下標(biāo)dx賦初值,表示新開辟一個(gè)數(shù)據(jù)區(qū)。dx的初值為3,因?yàn)槊總€(gè)數(shù)據(jù)區(qū)包含三個(gè)內(nèi)部變量RA,DL和SL?!?運(yùn)行時(shí)存儲組織和管理對于源程序的每一個(gè)過程(包括主程序),在被調(diào)用時(shí),首先在數(shù)據(jù)段中開辟三個(gè)空間,存放靜態(tài)鏈SL、動態(tài)鏈DL和返回地址RA。靜態(tài)鏈記錄了定義該過程的直接外過程(或主程序)運(yùn)行時(shí)最新數(shù)據(jù)段的基地址。動態(tài)鏈記錄調(diào)用該過程前正在運(yùn)行的過程的數(shù)據(jù)段基址。返回地址記錄了調(diào)用該過程時(shí)程序運(yùn)行的斷點(diǎn)位置。對于主程序來說,SL、DL和RA的值均置為0。靜態(tài)鏈的功能是在一個(gè)子過程要引用它的直接或間接父過程(這里的父過程是按定義過程時(shí)的嵌套情況來定的,而不是按執(zhí)行時(shí)的調(diào)用順序定的)的變量時(shí),可以通過靜態(tài)鏈,跳過個(gè)數(shù)為層差的數(shù)據(jù)段,找到包含要引用的變量所在的數(shù)據(jù)段基址,然后通過偏移地址訪問它。在過程返回時(shí),解釋程序通過返回地址恢復(fù)指令指針的值到調(diào)用前的地址,通過當(dāng)前段基址恢復(fù)數(shù)據(jù)段分配指針,通過動態(tài)鏈恢復(fù)局部段基址指針。實(shí)現(xiàn)子過程的返回。對于主程序來說,解釋程序會遇到返回地址為0的情況,這時(shí)就認(rèn)為程序運(yùn)行結(jié)束。解釋程序過程中的base函數(shù)的功能,就是用于沿著靜態(tài)鏈,向前查找相差指定層數(shù)的局部數(shù)據(jù)段基址。這在使用sto、lod、stoArr、lodArr等訪問局部變量的指令中會經(jīng)常用到。類PCODE代碼解釋執(zhí)行的部分通過循環(huán)和簡單的case判斷不同的指令,做出相應(yīng)的動作。當(dāng)遇到主程序中的返回指令時(shí),指令指針會指到0位置,把這樣一個(gè)條件作為終至循環(huán)的條件,保證程序運(yùn)行可以正常的結(jié)束?!?語法分析方法語法分析子程序采用了自頂向下的遞歸子程序法,語法分析同時(shí)也根據(jù)程序的語義生成相應(yīng)三元代碼,并提供了出錯處理的機(jī)制。語法分析主要由分程序分析過程(BLOCK)、參數(shù)變量分析過程(ParaDeclaration)、參數(shù)變量處理過程(ParaGetSub)、數(shù)組處理過程(ParaGetSub)、常量定義分析過程(ConstDeclaration)、變量定義分析過程(Vardeclaration)、語句分析過程(Statement)、表達(dá)式處理過程(Expression)、項(xiàng)處理過程(Term)、因子處理過程(Factor)和條件處理過程(Condition)構(gòu)成。這些過程在結(jié)構(gòu)上構(gòu)成一個(gè)嵌套的層次結(jié)構(gòu)。除此之外,還有出錯報(bào)告過程(Error)、代碼生成過程(Gen)、測試單詞合法性及出錯恢復(fù)過程(Test)、登錄名字表過程(Enter)、查詢名
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省玉溪市民中2025年高三適應(yīng)性調(diào)研考試化學(xué)試題含解析
- 弘揚(yáng)民族精神增強(qiáng)愛國教育
- 山東省鄒城一中2025屆高考化學(xué)押題試卷含解析
- 2025屆浙江省杭州市七縣區(qū)高三第三次模擬考試化學(xué)試卷含解析
- 內(nèi)蒙古一機(jī)集團(tuán)第一中學(xué)2025年高三第二次調(diào)研化學(xué)試卷含解析
- 心梗病人的護(hù)理
- 福建省泉州市20023年第29屆WMO競賽三年級數(shù)學(xué)下學(xué)期競賽試卷
- 2024-2025學(xué)年河北省邢臺市四縣兄弟學(xué)校聯(lián)考高一上學(xué)期1月期末數(shù)學(xué)試卷(含答案)
- 上海市七寶高中2025屆高考化學(xué)考前最后一卷預(yù)測卷含解析
- 云南省曲靖市宣威民族中學(xué)2025屆高三最后一?;瘜W(xué)試題含解析
- 【MOOC】電子線路設(shè)計(jì)、測試與實(shí)驗(yàn)(一)-華中科技大學(xué) 中國大學(xué)慕課MOOC答案
- 部編人教版小學(xué)四年級數(shù)學(xué)下冊第1-4單元檢測試卷(附答案)四套
- 第七屆江蘇技能狀元大賽物流服務(wù)師項(xiàng)目樣題
- 醫(yī)院數(shù)據(jù)備份與恢復(fù)管理制度
- 信息檢索與利用課件 第8章 網(wǎng)絡(luò)信息檢索(下)
- DB43T 1606-2019 煙花爆竹涉藥機(jī)械設(shè)備安全論證規(guī)程
- 2024年安徽省初中(八年級)學(xué)業(yè)水平考試地理試卷含答案
- 《油藏物理》西安石油大學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 江蘇省蘇州市姑蘇區(qū)草橋中學(xué)校2022-2023學(xué)年七下期中數(shù)學(xué)試題(原卷版)
- n3護(hù)士崗位競聘范文
- 《公共管理學(xué)》第五章-政府作用課件
評論
0/150
提交評論