版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑材料加工生產(chǎn)合同范本4篇
- 專業(yè)出國留學輔導協(xié)議樣本(2024)版B版
- 2025年度醫(yī)療器械緊急運輸服務協(xié)議3篇
- 2025年度數(shù)據(jù)中心場地租賃合作協(xié)議4篇
- 2025年度食品試用及消費者滿意度調(diào)查合同4篇
- 2025年度綠色建筑設計與施工一體化服務合同4篇
- 2025年度市政基礎設施改造鏟車租賃協(xié)議書4篇
- 二零二四全新建筑工程施工聯(lián)營協(xié)議書下載3篇
- 2024重慶離婚協(xié)議書標準范文
- 二婚再婚2024年度財產(chǎn)共有協(xié)議
- 2024年黑河嫩江市招聘社區(qū)工作者考試真題
- 第22單元(二次函數(shù))-單元測試卷(2)-2024-2025學年數(shù)學人教版九年級上冊(含答案解析)
- 藍色3D風工作總結(jié)匯報模板
- 安全常識課件
- 河北省石家莊市2023-2024學年高一上學期期末聯(lián)考化學試題(含答案)
- 2024年江蘇省導游服務技能大賽理論考試題庫(含答案)
- 2024年中考英語閱讀理解表格型解題技巧講解(含練習題及答案)
- 新版中國食物成分表
- 浙江省溫州市溫州中學2025屆數(shù)學高二上期末綜合測試試題含解析
- 2024年山東省青島市中考生物試題(含答案)
- 保安公司市場拓展方案-保安拓展工作方案
評論
0/150
提交評論