編譯原理實(shí)驗(yàn)_第1頁(yè)
編譯原理實(shí)驗(yàn)_第2頁(yè)
編譯原理實(shí)驗(yàn)_第3頁(yè)
編譯原理實(shí)驗(yàn)_第4頁(yè)
編譯原理實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.PL/0編譯程序

PL/0編譯程序

PL/0語(yǔ)言程序

類(lèi)pcode代碼源語(yǔ)言(PL/0)

目標(biāo)語(yǔ)言(類(lèi)pcode)實(shí)現(xiàn)語(yǔ)言(C/pascal)PL/0編譯程序類(lèi)pcode解釋程序類(lèi)pcode代碼PL/0源程序輸入輸出PL/0編譯系統(tǒng)的結(jié)構(gòu)框架2.PL/0語(yǔ)言PL/0語(yǔ)言特征PL/0的語(yǔ)法描述圖PL/0語(yǔ)言文法的EBNF表示PL/0程序示例PL/0語(yǔ)言是PASCAL語(yǔ)言的子集數(shù)據(jù)類(lèi)型,只有整型數(shù)據(jù)結(jié)構(gòu),只有簡(jiǎn)變和常量整數(shù)最多為14位標(biāo)識(shí)符的有效長(zhǎng)度是10位過(guò)程最多可嵌套三層作用域規(guī)則(內(nèi)層可引用包圍它的外層定義的標(biāo)識(shí)符),過(guò)程可嵌套定義,可遞歸調(diào)用

內(nèi)的文字或符號(hào)表示非終結(jié)符或內(nèi)的文字或符號(hào)表示終結(jié)符2.2語(yǔ)法描述圖constidentnumbervaridentprocedureident分程序語(yǔ)句分程序例:用語(yǔ)法描述圖描述分程序的定義EBNF引入的符號(hào)(元符號(hào)):<>:用左右尖括號(hào)括起來(lái)的語(yǔ)法成分為非終結(jié)符∷=:‘定義為’∷=的左部由右部定義|:‘或’{}:表示花括號(hào)內(nèi)的語(yǔ)法成分可重復(fù)任意次或限定次數(shù)

[]:表示方括號(hào)內(nèi)的語(yǔ)法成分為任選項(xiàng)():表示圓括號(hào)內(nèi)的成分優(yōu)先2.3EBNF范式例:用EBNF描述分程序的定義<分程序>∷=[<常量說(shuō)明部分>][<變量說(shuō)明部分>][<過(guò)程說(shuō)明部分>]<語(yǔ)句><常量說(shuō)明部分>∷=CONST<常量定義>{,<常量定義>};<常量定義>∷=<標(biāo)識(shí)符>=<無(wú)符號(hào)整數(shù)><變量說(shuō)明部分>∷=VAR<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>};

PL/0程序示例

CONSTA=10;(*常量說(shuō)明部分*) VARB,C;(*變量說(shuō)明部分*) PROCEDUREP;

(*過(guò)程說(shuō)明部分*) VARD; PROCEDUREQ; VARX;

BEGIN

READ(X); D:=X; WHILEX#0DO CALLP;

END;

BEGIN WRITE(D); CALLQ;

END; BEGIN CALLP; END.Q的過(guò)程體P的過(guò)程體主程序體3.PL/0編譯程序的總體設(shè)計(jì)詞法分析程序語(yǔ)法語(yǔ)義分析程序代碼生成程序表格管理程序出錯(cuò)處理程序PL/0源程序目標(biāo)程序其編譯過(guò)程采用一趟掃描方式以語(yǔ)法、語(yǔ)義分析程序?yàn)楹诵?/p>

詞法分析程序和代碼生成程序都作為一個(gè)過(guò)程,當(dāng)語(yǔ)法分析需要讀單詞時(shí)就調(diào)用詞法分析程序,而當(dāng)語(yǔ)法、語(yǔ)義分析正確,需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。表格管理程序?qū)崿F(xiàn)變量,常量和過(guò)程標(biāo)識(shí)符的信息的登錄與查找。出錯(cuò)處理程序,對(duì)詞法和語(yǔ)法、語(yǔ)義分析遇到的錯(cuò)誤給出在源程序中出錯(cuò)的位置和與錯(cuò)誤性質(zhì)有關(guān)的編號(hào),并進(jìn)行錯(cuò)誤恢復(fù)。4.詞法分析分析過(guò)程所要完成的任務(wù):

讀源程序(getch)

濾空格識(shí)別保留字識(shí)別標(biāo)識(shí)符拼數(shù)拼雙字符單詞識(shí)別單字符單詞符號(hào)表typesymbol=(nul,ident,number,plus,…,varsym,procsym);保留字表:word[1]:=‘BEGIN‘;word[2]:=‘CALL‘;...word[13]:=‘WRITE‘;單字符表:ssym[‘+’]:=plus;ssym[‘-’]:=minus;…ssym[‘;’]:=semicolon;重要變量及過(guò)程注意:按ASCII順序存儲(chǔ)保留字。查到時(shí)找到相應(yīng)的內(nèi)部表示wsym[1]:=beginsym;wsym[2]:=callsym;…wsym[13]:=writesym;全局變量1)SYM:存放單詞的類(lèi)別如:有程序段落為:begininitial:=60;end對(duì)應(yīng)單詞翻譯后變?yōu)椋篵eginbeginsym,initialident,‘:=‘becomes,60number,‘;’semicolon,endendsym。2)ID:存放用戶(hù)所定義的標(biāo)識(shí)符的值如:initial(在SYM中放ident,在ID中放initial)3)NUM:存放用戶(hù)定義的數(shù)如:60(在SYM中放在number在NUM中放60)GETSYM框圖(見(jiàn)教材P19圖2.5)重要變量及過(guò)程任務(wù)一:讀程序內(nèi)容讀程序GetSym()

識(shí)別保留字識(shí)別標(biāo)識(shí)符拼數(shù)拼雙字符單詞識(shí)別單字符單詞要求每班前十名同學(xué)給予檢查任務(wù)二:擴(kuò)充單詞內(nèi)容增加保留字:FOR、DOWNTO和TO增加雙字符單詞:*=和/=要求設(shè)計(jì)測(cè)試方式,測(cè)試單詞是否能被識(shí)別每班前十名同學(xué)給予檢查

5.語(yǔ)法分析

—遞歸子程序法對(duì)應(yīng)每個(gè)非終結(jié)符語(yǔ)法單元,編一個(gè)獨(dú)立的處理過(guò)程(或子程序)。沿語(yǔ)法描述圖箭頭所指出的方向進(jìn)行分析:

1)遇到分支點(diǎn)時(shí),將當(dāng)前的單詞與分支點(diǎn)上多個(gè)終結(jié)符逐個(gè)相比較,若都不匹配時(shí)可能是進(jìn)入下一個(gè)非終結(jié)符語(yǔ)法單位或是出錯(cuò)。

2)當(dāng)遇到非終結(jié)符時(shí),則調(diào)用相應(yīng)的處理過(guò)程;

3)當(dāng)遇到描述圖中是終結(jié)符時(shí),則判斷當(dāng)前讀入的單詞是否與圖中的終結(jié)符相匹配,若匹配,再讀取下一個(gè)單詞繼續(xù)分析。程序pl0分程序block語(yǔ)句

statement條件condition表達(dá)式expression項(xiàng)term因子factor語(yǔ)法調(diào)用關(guān)系圖語(yǔ)句例:條件語(yǔ)句(不帶else子句)的遞歸子程序if條件thenstatement(){if(SYM==ifsym){//處理?xiàng)l件語(yǔ)句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//處理其它語(yǔ)句}語(yǔ)句任務(wù)三擴(kuò)充條件語(yǔ)句(帶else子句)畫(huà)出語(yǔ)法描述圖寫(xiě)出遞歸子程序類(lèi)pcode代碼語(yǔ)句的語(yǔ)義分析和處理6.語(yǔ)義分析

目標(biāo)代碼類(lèi)pcode是一種假想棧式計(jì)算機(jī)的匯編語(yǔ)言。指令格式:類(lèi)pcode代碼是由過(guò)程

GEN生成的,放在數(shù)組CODE中。flaf功能碼l層次差(標(biāo)識(shí)符引用層減去定義層)a根據(jù)不同的指令有所區(qū)別6.1類(lèi)pcode代碼指令功能表

CONSTa=10;

VARb,c;

BEGIN

READ(b);

WHILEb#0DO

BEGIN

READ(b);

END

END.

(0)

int05(1)opr016(2)sto03(3)lod03(4)lit00(5)opr09(6)jpc016(7)opr016(8)sto03(9)jmp03(10)opr00例:pcode代碼示例解釋器的結(jié)構(gòu)一維整型數(shù)組S作為運(yùn)行棧RADLSLbt每次調(diào)用過(guò)程時(shí)會(huì)在棧頂分配3個(gè)存儲(chǔ)單元:RA:返回地址,記錄調(diào)用該過(guò)程時(shí)目標(biāo)程序的斷點(diǎn);DL:動(dòng)態(tài)鏈,指向調(diào)用過(guò)程的AR基地址;SL:靜態(tài)鏈,指向定義該過(guò)程的直接定義外過(guò)程的AR基地址當(dāng)前AR的基地址棧頂位置

CONSTa=10;

VARb,c;

BEGIN

READ(b);

WHILEb#0DO

BEGIN

READ(b);

END

END.

(0)

int05(1)opr016(2)sto03(3)lod03(4)lit00(5)opr09(6)jpc010(7)opr016(8)sto03(9)jmp03(10)opr00例:pcode代碼的解釋執(zhí)行cb00020200100<條件語(yǔ)句>::=if<條件>then<語(yǔ)句>if(SYM==ident){//處理?xiàng)l件語(yǔ)句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//處理其它語(yǔ)句6.2條件語(yǔ)句的語(yǔ)義分析和處理(a>b)lod0alod0bopr012write(a)lod0aopr014opr015<條件語(yǔ)句>::=if<條件>then<語(yǔ)句>if(SYM==ident){//處理?xiàng)l件語(yǔ)句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//處理其它語(yǔ)句6.2條件語(yǔ)句的語(yǔ)義分析和處理CS(a>b)lod0alod0bopr012write(a)lod0aopr014opr015YNlod0alod0bopr012lod0aopr014opr015jpc00<條件語(yǔ)句>::=if<條件>then<語(yǔ)句>if(SYM==ident){//處理?xiàng)l件語(yǔ)句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//處理其它語(yǔ)句6.2條件語(yǔ)句的語(yǔ)義分析和處理CS(a>b)write(a)YNlod0alod0bopr012lod0aopr014opr015jpc00GEN(jpc,0,0)<條件語(yǔ)句>::=if<條件>then<語(yǔ)句>if(SYM==ident){//處理?xiàng)l件語(yǔ)句getSym();

condition();if(SYM==thensym)getSym();elseError();

statement();}else{……}//處理其它語(yǔ)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論