資源描述:
《第二章 PL0編譯程序ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、PL/0編譯程序PL/0編譯程序PL/0語(yǔ)言程序類(lèi)pcode代嗎源語(yǔ)言(PL/0)目標(biāo)語(yǔ)言(類(lèi)pcode)實(shí)現(xiàn)語(yǔ)言(pascal)PL/0類(lèi)pcodepascalPL/0編譯程序類(lèi)pcode解釋程序類(lèi)pcode代碼PL/0源程序輸入輸出PL/0編譯系統(tǒng)的結(jié)構(gòu)框架PL/0語(yǔ)言PL/0程序示例PL/0的語(yǔ)法描述圖PL/0語(yǔ)言文法的EBNF表示PL/0語(yǔ)言:PASCAL語(yǔ)言的子集PL/0程序示例CONSTA=10;(*常量說(shuō)明部分*)VARB,C;(*變量說(shuō)明部分*)PROCEDUREP;(*過(guò)程說(shuō)明部分*)VARD;PROCEDUREQ;VARX;BEGI
2、NREAD(X);D:=X;WHILEX#0DOCALLP;END;BEGINWRITE(D);CALLQ;END;BEGINCALLP;END.Q的過(guò)程體p的過(guò)程體主程序體程序分程序.內(nèi)的文字表示非終結(jié)符或內(nèi)的文字或符號(hào)表示終結(jié)符constidentnumber=,;varident,;;procedureident;分程序語(yǔ)句分程序PL/0語(yǔ)言文法的EBNF表示EBNF引入的符號(hào)(元符號(hào)):<>用左右尖括號(hào)括起來(lái)的語(yǔ)法成分為非終結(jié)符∷=(→)‘定義為’∷=(→)的左部由右部定義
3、‘或’{}表示花括號(hào)內(nèi)的語(yǔ)法成分可重復(fù)任意次或限定次數(shù)[]
4、表示方括號(hào)內(nèi)的語(yǔ)法成分為任選項(xiàng)()表示圓括號(hào)內(nèi)的成分優(yōu)先例:用EBNF描述<整數(shù)>的定義:<整數(shù)>∷=[+
5、-]<數(shù)字>{<數(shù)字>}<數(shù)字>∷=0
6、1
7、2
8、3
9、4
10、5
11、6
12、7
13、8
14、9或更好的寫(xiě)法<整數(shù)>∷=[+
15、-]<非零數(shù)字>{<數(shù)字>}
16、0<非零數(shù)字>∷=1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9<數(shù)字>∷=0
25、<非零數(shù)字>PL/0語(yǔ)言是PASCAL語(yǔ)言的子集同PASCAL作用域規(guī)則(內(nèi)層可引用包圍它的外層定義的標(biāo)識(shí)符),上下文約束,過(guò)程可嵌套定義,可遞歸調(diào)用子集數(shù)據(jù)類(lèi)型,只有整型數(shù)據(jù)結(jié)構(gòu),只有簡(jiǎn)變和常數(shù)數(shù)字最多為14位標(biāo)識(shí)符的有效長(zhǎng)度是10語(yǔ)句種類(lèi)過(guò)
26、程最多可嵌套三層目標(biāo)代碼類(lèi)pcode目標(biāo)代碼類(lèi)pcode是一種假想棧式計(jì)算機(jī)的匯編語(yǔ)言。指令格式:flaf功能碼l層次差(標(biāo)識(shí)符引用層減去定義層)a根據(jù)不同的指令有所區(qū)別指令功能表consta=10;varb,c;procedurep;beginc:=b+a;end;beginread(b);whileb#0dobegincallp;write(2*c);read(b);endend.(0)jmp08轉(zhuǎn)向主程序入口(1)jmp02轉(zhuǎn)向過(guò)程p入口(2)int03過(guò)程p入口,為過(guò)程p開(kāi)辟空間(3)lod13取變量b的值到棧頂(4)li
27、t010取常數(shù)10到棧頂(5)opr02次棧頂與棧頂相加(6)sto14棧頂值送變量c中(7)opr00退棧并返回調(diào)用點(diǎn)(16)(8)int05主程序入口開(kāi)辟5個(gè)??臻g(9)opr016從命令行讀入值置于棧頂(10)sto03將棧頂值存入變量b中(11)lod03將變量b的值取至棧頂(12)lit00將常數(shù)值0進(jìn)棧(13)opr09次棧頂與棧頂是否不等(14)jpc024等時(shí)轉(zhuǎn)(24)(條件不滿足轉(zhuǎn))(15)cal02調(diào)用過(guò)程p(16)lit02常數(shù)值2進(jìn)棧(17)lod04將變量c的值取至棧頂(18)opr04次棧頂與棧頂相乘(2*c)(19)opr0
28、14棧頂值輸出至屏幕(20)opr015換行(21)opr016從命令行讀取值到棧頂(22)sto03棧頂值送變量b中(23)jmp011無(wú)條件轉(zhuǎn)到循環(huán)入口(11)(24)opr00結(jié)束退棧PL/0編譯程序的結(jié)構(gòu)詞法分析程序語(yǔ)法語(yǔ)義分析程序代碼生成程序表格管理程序出錯(cuò)處理程序PL/0源程序目標(biāo)程序PL/0編譯程序的總體設(shè)計(jì)其編譯過(guò)程采用一趟掃描方式以語(yǔ)法、語(yǔ)義分析程序?yàn)楹诵脑~法分析程序和代碼生成程序都作為一個(gè)過(guò)程,當(dāng)語(yǔ)法分析需要讀單詞時(shí)就調(diào)用詞法分析程序,而當(dāng)語(yǔ)法、語(yǔ)義分析正確,需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)用代碼生成程序。表格管理程序?qū)崿F(xiàn)變量,常量和過(guò)
29、程標(biāo)識(shí)符的信息的登錄與查找。出錯(cuò)處理程序,對(duì)詞法和語(yǔ)法、語(yǔ)義分析遇到的錯(cuò)誤給出在源程序中出錯(cuò)的位置和與錯(cuò)誤性質(zhì)有關(guān)的編號(hào),并進(jìn)行錯(cuò)誤恢復(fù)。PL/0編譯程序詞法分析的設(shè)計(jì)與實(shí)現(xiàn)識(shí)別的單詞:保留字或關(guān)鍵字:如:BEGIN、END、IF、THEN等運(yùn)算符:如:+、-、*、/、:=、#、>=、<=等標(biāo)識(shí)符:用戶定義的變量名、常數(shù)名、過(guò)程名常數(shù):如:10、25、100等整數(shù)界符:如:‘,’、‘.’、‘;’、‘(’、‘)’等詞法分析過(guò)程GETSYM所要完成的任務(wù):讀源程序(getch)濾空格識(shí)別保留字識(shí)別標(biāo)識(shí)符拼數(shù)識(shí)別單字符單詞拼雙字符單詞詞法分析過(guò)程:GETSYM
30、框圖(見(jiàn)教材圖2.5)程序(proceduregetsym)當(dāng)識(shí)別到標(biāo)識(shí)符時(shí)先查