PL0語言編譯器分析實驗報告_第1頁
PL0語言編譯器分析實驗報告_第2頁
PL0語言編譯器分析實驗報告_第3頁
PL0語言編譯器分析實驗報告_第4頁
PL0語言編譯器分析實驗報告_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、PL/O語言編譯器分析實驗報告 一、實驗?zāi)康?通過閱讀與解析一個實際編譯器(PL/O語言編譯器)的源代碼,加深對編 譯階段(包括詞法分析、語法分析、語義分析、中間代 碼生成等)和編譯系統(tǒng) 軟件結(jié)構(gòu)的理解,并達到提高學生學習興趣的目的。 二、實驗要求 (1) 要求掌握基本的程序設(shè)計技巧(C語言)和閱讀較大規(guī)模程序源代碼 的能力; (2) 理解并掌握編譯過程的邏輯階段及各邏輯階段的功能; (3) 要求能把握整個系統(tǒng)(PL/O語言編譯器)的體系結(jié)構(gòu),各功能 模塊的 功能,各模塊之間的接口; (4) 要求能總結(jié)出實現(xiàn)編譯過程各邏輯階段功能采用的具體算法與技術(shù)。 三、實驗步驟 (1) 根據(jù)PL/O語言的

2、語法圖,理解PL/O語言各級語法單位的結(jié)構(gòu),掌握 PL/O語言合法程序的結(jié)構(gòu); (2) 從總體上分析整個系統(tǒng)的體系結(jié)構(gòu)、各功能模塊的功能、各模塊之間的 調(diào)用關(guān)系、各模塊之間的接口; (3) 詳細分析各子程序和函數(shù)的代碼結(jié)構(gòu)、程序流程、采用的主要算法及實 現(xiàn)的功能; (4) 撰寫分析報告,主要內(nèi)容包括系統(tǒng)結(jié)構(gòu)框圖、模塊接口、主要算法、各 模塊程序流程圖等。 四、報告內(nèi)容 pl/O語言是pascal語言的一個子集,我們這里分析的pl/O的編譯程序包括了 對pl/O語言源程序進行分析處理、編譯生成類 pcode代碼,并在虛擬機上解釋運 行生成的類pcode代碼的功能。 pl/O語言編譯程序采用以語法

3、分析為核心、 一遍掃描的編譯方法。詞法分析 和代碼生成作為獨立的子程序供語法分析程序調(diào)用。 語法分析的同時,提供了出 錯報告和出錯恢復的功能。在源程序沒有錯誤編譯通過的情況下,調(diào)用類 pcode 解釋程序解釋執(zhí)行生成的類pcode代碼。 PL/O語言文法的EBNF表示 EBNF表示的符號說明。 用左右尖括號括起來的中文子表示語法構(gòu)造成分,或稱語法單 位,為非終結(jié)符。 := 該符號的左部由右部定義,可讀作“定義為”。 | 表示“或”,為左部可由多個右部定義。 花括號表示其內(nèi)的語法成分可以重復。在不加上下界時可重復0 到任意次數(shù),有上下界時為可重復次數(shù)的限制。 PL/O編譯程序過程與函數(shù)定義層次結(jié)

4、構(gòu)圖 plO err or getsyn gen t est block enter positioon corirtdecl n ati on vardeclaration listcode statement expression term fact or condi interpret base PL/O的解釋執(zhí)行結(jié)構(gòu) PL/O語言目標程序 PL/O編譯程序結(jié)構(gòu) PL/O源程序 編譯程序總體流程圖 PL/0編譯程序的語法分析 PL/0編譯程序語法、語義分析是整個編譯程序設(shè)計與實現(xiàn)的核心部分,要求 學員努力學習掌握實現(xiàn)技術(shù)和方法?,F(xiàn)分別說明語法分析實現(xiàn)的主要思想方法和 語義分析的實現(xiàn)。 語

5、法分析的任務(wù)是識別由詞法分析給出的單詞符號序列在結(jié)構(gòu)上是否符合 給定的文法規(guī)則。PL/0語言的文法規(guī)則已在2.1節(jié)中給出。本節(jié)將以語法圖描 述的語法形式為依據(jù),給出語法分析過程的直觀思想。 PL/0編譯程序的語法分析采用了自頂向下的遞歸子程序法。 可用下面簡單的 PL/0程序為例構(gòu)造其語法分析樹 門頂向卜的語法分析 程序 VAR A; BEGIN READ(A) END. 分律序 變量說胡部分 語句 I11i VAR #識符; 復合語句 Ir1 A BEGIN 語嚴END 夠單句 READ (標識符) 語法調(diào)用關(guān)系圖 PL/O編譯程序語法分析的設(shè)計與實現(xiàn) 表達式的遞歸子程序?qū)崿F(xiàn) procedu

6、re expr; begin if sym in plus, minus the n begi n getsym; term; end else term; while sym in plus, minus do begin getsym; term; end en d; 因子:=標識符|無符號整數(shù)| (表達式) 因子的遞歸子程序?qū)崿F(xiàn) procedure factor; begin if sym ide nt the n begin if sym nu mber the n begin if sym =( then begin getsym; expr; if sym =)then getsy

7、m else error end else error end else getsym end else getsym en d; 說明部分的分析與處理 對每個過程(含主程序)說明的對象(變量,常量和過程)造符號表,登錄標識符的屬 性。標識符的屬性:種類,所在層次,值和分配的相對位置。登錄信息由ENTERS程完成。 常量定義語句的處理語法:常量說明部分:=const 常量定義, 常量定義; 常量定義 := 標識符 =無符號整數(shù) 無符號整數(shù) := 數(shù)字 數(shù)字 begin getsym; (* repeat (* if sym = con stsym the n 獲取下一個token,正常應(yīng)為用作

8、常量名的標識符*) 反復進行常量聲明*) 聲明以當前token為標識符的常量*) con stdeclarati on; (* while sym = comma do (*如果遇到了逗號則反復聲明下一常量*) begin getsym; (*獲取下一個token,這里正好應(yīng)該是標識符*) constdeclaration (*聲明以當前token為標識符的常量 *) en d; if sym = semicolo n the n (*如果常量聲明結(jié)束,應(yīng)遇到分號*) getsym (*獲取下一個token,為下一輪循環(huán)做好準備*) else error(5) (*提示5號錯誤*) un ti

9、l sym ide nt (*如果遇到非標識符,則常量聲明結(jié)束*) en d; 常量說明處理 procedure con stdeclarati on; begin if sym = ide nt the n begin getsym; if sym in eql, becomes the n (*如果是等號或賦值號*) if sym = becomes then (*如果是賦值號(常量生明中應(yīng)該是等號 )*) error(1); (*提示 1 號錯誤 *) getsym; (*獲取下一個token,等號或賦值號后應(yīng)接上數(shù)字*) if sym = number the n (*如果的確是數(shù)字

10、*) begin en ter(c on sta nt); (*把這個常量登陸到符號表*) getsym (*獲取下一個token,為后面作準備*) end else error(2) (*如果等號后接的不是數(shù)字,提示2號錯誤*) else error(3)(*如常量標識符后不是等號或賦值號,提示3號錯誤*) end else error(4) en d(* con stdeclarati on *); 變量定義語句的處理語法:變量說明部分:=var 標識符, 標識符; if sym=varsym the n begin getsym; repeat 變量說明處理*) vardeclarati

11、 on ;(* while sym=comma do begin getsym; vardeclarati on en d; if sym=semico Ion the n getsym else error(5) un til symide nt; en d; 變量說明處理 procedure ardeclaration; begin if sym=ide nt the n begin en ter(variable); getsym end else error(4) en d(*vardeclarati on *); 過程定義語句的處理程序: while sym = procsym do (*循環(huán)聲明各子過程*) begin getsym; (*獲取下一個token,此處正常應(yīng)為作為過程名的標識符*) if sym = ide nt the n (*如果 toke n 確為標識符 *) begin en ter(procedur); (*把這個過程

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論