版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PL/0語(yǔ)言編譯器分析實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)閱讀與解析一個(gè)實(shí)際編譯器(PL/0語(yǔ)言編譯器)的源代碼,加深對(duì)編譯階段(包括詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成等)和編譯系統(tǒng)軟件結(jié)構(gòu)的理解,并達(dá)到提高學(xué)生學(xué)習(xí)興趣的目的。二、實(shí)驗(yàn)要求(1)要求掌握基本的程序設(shè)計(jì)技巧(C語(yǔ)言)和閱讀較大規(guī)模程序源代碼的能力;(2)理解并掌握編譯過(guò)程的邏輯階段及各邏輯階段的功能;(3)要求能把握整個(gè)系統(tǒng)(PL/0語(yǔ)言編譯器)的體系結(jié)構(gòu),各功能模塊的功能,各模塊之間的接口;(4)要求能總結(jié)出實(shí)現(xiàn)編譯過(guò)程各邏輯階段功能采用的具體算法與技術(shù)。三、實(shí)驗(yàn)步驟(1)根據(jù)PL/0語(yǔ)言的語(yǔ)法圖,理解PL/0語(yǔ)言各級(jí)語(yǔ)法單位的結(jié)構(gòu),掌握PL/0語(yǔ)言合法程序的結(jié)構(gòu);(2)從總體上分析整個(gè)系統(tǒng)的體系結(jié)構(gòu)、各功能模塊的功能、各模塊之間的調(diào)用關(guān)系、各模塊之間的接口;(3)詳細(xì)分析各子程序和函數(shù)的代碼結(jié)構(gòu)、程序流程、采用的主要算法及實(shí)現(xiàn)的功能;(4)撰寫(xiě)分析報(bào)告,主要內(nèi)容包括系統(tǒng)結(jié)構(gòu)框圖、模塊接口、主要算法、各模塊程序流程圖等。四、報(bào)告內(nèi)容pl/0語(yǔ)言是pascal語(yǔ)言的一個(gè)子集,我們這里分析的pl/0的編譯程序包括了對(duì)pl/0語(yǔ)言源程序進(jìn)行分析處理、編譯生成類(lèi)pcode代碼,并在虛擬機(jī)上解釋運(yùn)行生成的類(lèi)pcode代碼的功能。pl/0語(yǔ)言編譯程序采用以語(yǔ)法分析為核心、一遍掃描的編譯方法。詞法分析和代碼生成作為獨(dú)立的子程序供語(yǔ)法分析程序調(diào)用。語(yǔ)法分析的同時(shí),提供了出錯(cuò)報(bào)告和出錯(cuò)恢復(fù)的功能。在源程序沒(méi)有錯(cuò)誤編譯通過(guò)的情況下,調(diào)用類(lèi)pcode解釋程序解釋執(zhí)行生成的類(lèi)pcode代碼。PL/0語(yǔ)言文法的EBNF表示EBNF表示的符號(hào)說(shuō)明?!础涤米笥壹饫ㄌ?hào)括起來(lái)的中文字表示語(yǔ)法構(gòu)造成分,或稱(chēng)語(yǔ)法單
位,為非終結(jié)符。::二該符號(hào)的左部由右部定義,可讀作“定義為”。|表示“或”,為左部可由多個(gè)右部定義。{}花括號(hào)表示其內(nèi)的語(yǔ)法成分可以重復(fù)。在不加上下界時(shí)可重復(fù)0到任意次數(shù),有上下界時(shí)為可重復(fù)次數(shù)的限制。PL/0編譯程序過(guò)程與函數(shù)定義層次結(jié)構(gòu)圖PL/0的解釋執(zhí)行結(jié)構(gòu)PL/0語(yǔ)言目標(biāo)程序PL/0語(yǔ)言解釋執(zhí)行程序PL/0編譯程序結(jié)構(gòu)PL/0語(yǔ)言目標(biāo)程序PL/0語(yǔ)言解釋執(zhí)行程序PL/0編譯程序結(jié)構(gòu)表格管理程出錯(cuò)處理程編譯程序總體流程圖結(jié)束PL/0編譯程序的語(yǔ)法分析PL/0編譯程序語(yǔ)法、語(yǔ)義分析是整個(gè)編譯程序設(shè)計(jì)與實(shí)現(xiàn)的核心部分,要求學(xué)員努力學(xué)習(xí)掌握實(shí)現(xiàn)技術(shù)和方法。現(xiàn)分別說(shuō)明語(yǔ)法分析實(shí)現(xiàn)的主要思想方法和語(yǔ)義分析的實(shí)現(xiàn)。語(yǔ)法分析的任務(wù)是識(shí)別由詞法分析給出的單詞符號(hào)序列在結(jié)構(gòu)上是否符合給定的文法規(guī)則。PL/0語(yǔ)言的文法規(guī)則已在節(jié)中給出。本節(jié)將以語(yǔ)法圖描述的語(yǔ)法形式為依據(jù),給出語(yǔ)法分析過(guò)程的直觀思想。PL/0編譯程序的語(yǔ)法分析采用了自頂向下的遞歸子程序法??捎孟旅婧?jiǎn)單的PL/0程序?yàn)槔龢?gòu)造其語(yǔ)法分析樹(shù)語(yǔ)法調(diào)用關(guān)系圖PL/0編譯程序語(yǔ)法分析的設(shè)計(jì)與實(shí)現(xiàn)〈表達(dá)式〉的遞歸子程序?qū)崿F(xiàn)procedureexpr;beginifsymin[plus,minus]thenbegingetsym;term;endelseterm;whilesymin[plus,minus]dobegingetsym;term;endend;〈因子〉::=〈標(biāo)識(shí)符〉|〈無(wú)符號(hào)整數(shù)〉|(‘〈表達(dá)式〉‘)’〈因子〉的遞歸子程序?qū)崿F(xiàn)procedurefactor;beginifsym<>identthenbeginifsym<>numberthenbeginifsym=‘(‘thenbegingetsym;expr;ifsym=‘)’thengetsymelseerrorendelseerrorendelsegetsymendelsegetsymend;說(shuō)明部分的分析與處理對(duì)每個(gè)過(guò)程(含主程序)說(shuō)明的對(duì)象(變量,常量和過(guò)程)造符號(hào)表,登錄標(biāo)識(shí)符的屬性。標(biāo)識(shí)符的屬性:種類(lèi),所在層次,值和分配的相對(duì)位置。登錄信息由ENTER過(guò)程完成。常量定義語(yǔ)句的處理語(yǔ)法:<常量說(shuō)明部分>::=const<常量定義>{,<常量定義>};<常量定義>::=<標(biāo)識(shí)符>=<無(wú)符號(hào)整數(shù)><無(wú)符號(hào)整數(shù)>::=<數(shù)字>{<數(shù)字>}ifsym=constsymthenbegingetsym;(*獲取下一個(gè)token,正常應(yīng)為用作常量名的標(biāo)識(shí)符*)repeat(*反復(fù)進(jìn)行常量聲明*)constdeclaration;(*聲明以當(dāng)前token為標(biāo)識(shí)符的常量*)whilesym=commado(*如果遇到了逗號(hào)則反復(fù)聲明下一常量*)begingetsym;(*獲取下一個(gè)token,這里正好應(yīng)該是標(biāo)識(shí)符*)constdeclaration(*聲明以當(dāng)前token為標(biāo)識(shí)符的常量*)end;ifsym=semicolonthen(*如果常量聲明結(jié)束,應(yīng)遇到分號(hào)*)getsym(*獲取下一個(gè)token,為下一輪循環(huán)做好準(zhǔn)備*)elseerror(5)(*提示5號(hào)錯(cuò)誤*)untilsym<>ident(*如果遇到非標(biāo)識(shí)符,則常量聲明結(jié)束*)end;常量說(shuō)明處理procedureconstdeclaration;beginifsym=identthenbegingetsym;ifsymin[eql,becomes]then(*如果是等號(hào)或賦值號(hào)*)ifsym=becomesthen(*如果是賦值號(hào)(常量生明中應(yīng)該是等號(hào))*)error(1);(*提示1號(hào)錯(cuò)誤*)getsym;(*獲取下一個(gè)token,等號(hào)或賦值號(hào)后應(yīng)接上數(shù)字*)ifsym=numberthen(*如果的確是數(shù)字*)beginenter(constant);(*把這個(gè)常量登陸到符號(hào)表*)getsym(*獲取下一個(gè)token,為后面作準(zhǔn)備*)endelseerror(2)(*如果等號(hào)后接的不是數(shù)字,提示2號(hào)錯(cuò)誤*)elseerror(3)(*如常量標(biāo)識(shí)符后不是等號(hào)或賦值號(hào),提示3號(hào)錯(cuò)誤*)endelseerror(4)end(*constdeclaration*);變量定義語(yǔ)句的處理語(yǔ)法:<變量說(shuō)明部分>::=var<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>};ifsym=varsymthenbegingetsym;repeatvardeclaration;(*變量說(shuō)明處理*)whilesym=commadobegingetsym;vardeclarationend;ifsym=semicolonthengetsymelseerror(5)untilsym<>ident;end;變量說(shuō)明處理procedureardeclaration;beginifsym=identthenbeginenter(variable);getsymendelseerror(4)end(*vardeclaration*);過(guò)程定義語(yǔ)句的處理程序:whilesym=procsymdo(*循環(huán)聲明各子過(guò)程*)begingetsym;(*獲取下一個(gè)token,此處正常應(yīng)為作為過(guò)程名的標(biāo)識(shí)符*)ifsym=identthen(*如果token確為標(biāo)識(shí)符*)beginenter(procedur);(*把這個(gè)過(guò)程登錄到名字表
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)營(yíng)銷(xiāo)策劃代理合同2024年
- 二手房購(gòu)買(mǎi)合同風(fēng)險(xiǎn)防控
- 停車(chē)場(chǎng)安全承包合同
- 勞動(dòng)互助協(xié)議格式
- 2024軟件開(kāi)發(fā)公司培訓(xùn)合作合同
- 2024年上海自愿離婚協(xié)議范本
- 技術(shù)咨詢(xún)合同的解除條件
- 常年知識(shí)產(chǎn)權(quán)顧問(wèn)聘請(qǐng)合同
- 藝術(shù)品授權(quán)合同
- 零利率借款協(xié)議范本
- 食用香料香精產(chǎn)品生產(chǎn)許可實(shí)施細(xì)則
- 全面推進(jìn)依法行政課件
- 船體強(qiáng)度與結(jié)構(gòu)設(shè)計(jì),課程設(shè)計(jì)
- 無(wú)限極制度(新人)講解版課件
- MSD潮濕敏感器件防護(hù)培訓(xùn)課件
- 十分鐘EE從入門(mén)到精通2.0
- 六年級(jí)英語(yǔ)上冊(cè)課件-Unit4 I have a pen pal 人教pep (共23張PPT)
- 賞識(shí)教育培訓(xùn)課程課件
- 山西恒泰佳源生物科技有限公司新建年產(chǎn)15萬(wàn)噸乙酸鈉項(xiàng)目環(huán)評(píng)報(bào)告書(shū)
- 工程開(kāi)工令模板
- 船用柴油機(jī)的發(fā)展與分類(lèi)課件
評(píng)論
0/150
提交評(píng)論