




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第頁共頁廣東工業大學編譯原理實驗報告實驗報告課程名稱____編譯原理__________題目名稱_PL/0編譯程序的修改擴充_學生學院______計算機學院__專業班級_______________學號學生姓名______________指導教師_______________20年月日一、課內實驗要求對PL/0作以下修改擴充:增加單詞:保留字ELSE,FOR,TO,DOWNTO,RETURN運算符*=,/=,++,--,&,||,!修改單詞:不等號#改為增加條件語句的ELSE子句,要求:寫出相關文法,語法圖,語義規則。二、實驗環境與工具計算機及操作系統:PC機,Windows2000,WindowsXP程序設計語言:C教學型編譯程序:PL/0設計方案概述:源、目標語言,實現工具(平臺),運行平臺源語言:PASCAL目標語言:假想棧式計算機的匯編語言,可稱為類PCODE指令代碼實現工具:VisualC++6.0運行平臺:Windows7三、設計方案1.結構設計說明(1)PL/0語言編譯器PL/0語言可看成是PASCAL語言的子集,它的編譯程序是一個編譯解釋執行系統。PL/0的目標程序為假想棧式計算機的匯編語言,與具體計算機無關。表格管理函數PL/0源程序出錯處理函數目標代碼生成程序目標代碼生成程序目標代碼生成程序目標代碼生成程序目標代碼生成程序(2)PL/0編譯程序的語法分析過程BLOCK是整個編譯過程的核心。這里根據編譯程序的總體流程圖,來弄清BLOCK過程在整個編譯程序中的作用。總流程圖如下圖所示:啟動置初值程序調用getsym取單詞分程序調用block過程語句是否為源程序出錯條件源程序是否有打印錯誤表達式調用解釋過程interpret解釋執行目標執行目標項因子結束PL/0語法調用關系圖PL/0的編譯程序采用一趟掃描方式,以語法分析程序為核心,詞法分析程序和代碼生成程序都作為一個獨立的過程,當語法分析需要讀單詞時就用詞法分析程序,而當語法分析正確需生成相應的目標代碼時,則調用代碼生成程序。此外,用表格管理程序建立變量,常量和過程標識符的說明與引用之間的信息聯系。用出錯處理程序對詞法和語法分析遇到的錯誤給出在源程序中出錯的位置和錯誤性質。(3)各功能模塊描述過程或函數名pl0errorgetsymgetchgentestblockenterposition(函數)constdeclarationvardeclaration簡要功能說明主程序出錯處理,打印出錯位置和錯誤編碼詞法分析,讀取一個單詞漏掉空格,讀取一個字符生成目標代碼,并送入目標程序區測試當前單詞符號是否合法分程序分析處理過程登錄名字表查找標識符在名字表中的位置常量定義處理變量說明處理listodestatementexpressiontermfactorconditioninterpretbase(函數)列出目標代碼清單語句處理表達式處理項處理因子處理條件處理對目標代碼的解釋執行程序通過靜態鏈求出數據區的基地址2、主要成分描述1符號表○為了組成一條指令,編譯程序必須知道其操作碼及其參數(數或地址)。這些值是由編譯程序本身聯系到相應標識符上去的。這種聯系是在處理常數、變量和過程說明完成的。為此,標識符表應包含每一標識符所聯系的屬性;如果標識符被說明為常數,其屬性值為常數值;如果標識符被說明成變量,其屬性就是由層次和修正量(偏移量)組成的地址;如果標識符被說明為過程,其屬性就是過程的入口地址及層次。常數的值由程序正文提供,編譯的任務就是確定存放該值的地址。我們選擇順序分配變量和代碼的方法;每遇到一個變量說明,就將數據單元的下標加一(PL/0機中,每個變量占一個存貯單元)。開始編譯一個過程時,要對數據單元的下標dx賦初值,表示新開辟一個數據區。dx的初值為3,因為每個數據區包含三個內部變量RA,DL和SL。○2運行時存儲組織和管理對于源程序的每一個過程(包括主程序),在被調用時,首先在數據段中開辟三個空間,存放靜態鏈SL、動態鏈DL和返回地址RA。靜態鏈記錄了定義該過程的直接外過程(或主程序)運行時最新數據段的基地址。動態鏈記錄調用該過程前正在運行的過程的數據段基址。返回地址記錄了調用該過程時程序運行的斷點位置。對于主程序來說,SL、DL和RA的值均置為0。靜態鏈的功能是在一個子過程要引用它的直接或間接父過程(這里的父過程是按定義過程時的嵌套情況來定的,而不是按執行時的調用順序定的)的變量時,可以通過靜態鏈,跳過個數為層差的數據段,找到包含要引用的變量所在的數據段基址,然后通過偏移地址訪問它。在過程返回時,解釋程序通過返回地址恢復指令指針的值到調用前的地址,通過當前段基址恢復數據段分配指針,通過動態鏈恢復局部段基址指針。實現子過程的返回。對于主程序來說,解釋程序會遇到返回地址為0的情況,這時就認為程序運行結束。解釋程序過程中的base函數的功能,就是用于沿著靜態鏈,向前查找相差指定層數的局部數據段基址。這在使用sto、lod、stoArr、lodArr等訪問局部變量的指令中會經常用到。類PCODE代碼解釋執行的部分通過循環和簡單的case判斷不同的指令,做出相應的動作。當遇到主程序中的返回指令時,指令指針會指到0位置,把這樣一個條件作為終至循環的條件,保證程序運行可以正常的結束。○3語法分析方法語法分析子程序采用了自頂向下的遞歸子程序法,語法分析同時也根據程序的語義生成相應三元代碼,并提供了出錯處理的機制。語法分析主要由分程序分析過程(BLOCK)、參數變量分析過程(ParaDeclaration)、參數變量處理過程(ParaGetSub)、數組處理過程(ParaGetSub)、常量定義分析過程(ConstDeclaration)、變量定義分析過程(Vardeclaration)、語句分析過程(Statement)、表達式處理過程(Expression)、項處理過程(Term)、因子處理過程(Factor)和條件處理過程(Condition)構成。這些過程在結構上構成一個嵌套的層次結構。除此之外,還有出錯報告過程(Error)、代碼生成過程(Gen)、測試單詞合法性及出錯恢復過程(Test)、登錄名字表過程(Enter)、查詢名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藝術品交易及投資合同
- 會員充值卡消費合同二零二五年
- 兼職的合同書
- 招商外包合同
- 二零二五版職工購房補貼借款合同書
- 境內旅游合同
- 蔬菜買賣合同
- 二零二五液氨運輸銷售合同書范例
- 二零二五版出國勞務擔保人合同范例
- 運輸合同書與運輸合同書二零二五年
- 全套教學課件《工程倫理學》
- 倍他司汀推廣方案
- 山東省濟南市2023-2024學年高二下學期7月期末考試 數學 含解析
- 智鼎在線測評題圖形題
- 高考新題型現代文閱讀Ⅱ小說之雙文本比較閱讀答題攻略-2025年高考語文一輪復習
- 2024年山東省菏澤市曹縣小升初英語試卷
- 固定式壓力容器年度檢查表
- 中國普通食物營養成分表(修正版)
- 華東師大版歷史九年級上冊第11課大化改新與中古日本課件
- 中醫病歷書寫基本規范和中醫電子病歷基本規范
- 1.3.2太陽直射點的南北移動
評論
0/150
提交評論