編譯原理實驗_第1頁
編譯原理實驗_第2頁
編譯原理實驗_第3頁
編譯原理實驗_第4頁
編譯原理實驗_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.PL/0編譯程序

PL/0編譯程序

PL/0語言程序

類pcode代碼源語言(PL/0)

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

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

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

PL/0程序示例

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

(*過程說明部分*) VARD; PROCEDUREQ; VARX;

BEGIN

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

END;

BEGIN WRITE(D); CALLQ;

END; BEGIN CALLP; END.Q的過程體P的過程體主程序體3.PL/0編譯程序的總體設計詞法分析程序語法語義分析程序代碼生成程序表格管理程序出錯處理程序PL/0源程序目標程序其編譯過程采用一趟掃描方式以語法、語義分析程序為核心

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

讀源程序(getch)

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

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

5.語法分析

—遞歸子程序法對應每個非終結(jié)符語法單元,編一個獨立的處理過程(或子程序)。沿語法描述圖箭頭所指出的方向進行分析:

1)遇到分支點時,將當前的單詞與分支點上多個終結(jié)符逐個相比較,若都不匹配時可能是進入下一個非終結(jié)符語法單位或是出錯。

2)當遇到非終結(jié)符時,則調(diào)用相應的處理過程;

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

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

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

statement();}else{……}//處理其它語句}語句任務三擴充條件語句(帶else子句)畫出語法描述圖寫出遞歸子程序類pcode代碼語句的語義分析和處理6.語義分析

目標代碼類pcode是一種假想棧式計算機的匯編語言。指令格式:類pcode代碼是由過程

GEN生成的,放在數(shù)組CODE中。flaf功能碼l層次差(標識符引用層減去定義層)a根據(jù)不同的指令有所區(qū)別6.1類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作為運行棧RADLSLbt每次調(diào)用過程時會在棧頂分配3個存儲單元:RA:返回地址,記錄調(diào)用該過程時目標程序的斷點;DL:動態(tài)鏈,指向調(diào)用過程的AR基地址;SL:靜態(tài)鏈,指向定義該過程的直接定義外過程的AR基地址當前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<條件語句>::=if<條件>then<語句>if(SYM==ident){//處理條件語句getSym();

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論