資源描述:
《補充:PL0編譯程序的實現(xiàn)ppt課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第二章PL/0編譯程序的實現(xiàn)本章目的:以PL/0為例學習編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù),熟悉并理解編譯程序的基本原理和概念。1PL/0編譯程序pcode解釋程序PL/0源程序pcode代碼注:此處的pcode代碼專指PL/0的目標碼,注意與傳統(tǒng)pcode的區(qū)別2第二章PL/0編譯程序的實現(xiàn)步驟1、認識源語言PL/0與目標代碼pcode及它們之間的映射步驟2、PL/0編譯程序的總體設計步驟3、PL/0編譯程序詞法分析的設計與實現(xiàn)步驟4、PL/0編譯程序語法語義分析的設計與實現(xiàn)3第二章PL/0編譯程序的實現(xiàn)步驟5、PL
2、/0編譯程序代碼生成的實現(xiàn)步驟6、PL/0編譯程序語法錯誤處理的實現(xiàn)步驟7、pcode代碼解釋器的設計與實現(xiàn)4步驟1、認識源語言PL/0與目標代碼pcode及它們之間的映射何為PL/0語言?認識目標代碼pcodePL/0程序到pcode代碼的映射5何為PL/0語言?PL/0語言:PASCAL語言的子集,功能簡單,結(jié)構(gòu)清晰,可讀性強,具備了一般高級語言的必備部分PL/0程序示例PL/0的非形式描述PL/0的語法描述圖PL/0語言文法的EBNF表示6PL/0程序示例CONSTA=10;VARB,C;PROCEDURE
3、P;VARD;PROCEDUREQ;VARX;BEGINREAD(X);D:=X;WHILEX#0DOCALLP;END;BEGINWRITE(D);CALLQ;END;BEGINCALLP;END.7PL/0非形式描述數(shù)據(jù)類型只有整型標識符的有效長度是10,以字母開始的字母數(shù)字串數(shù)最多為14位過程無參,可嵌套(最多三層),可遞歸調(diào)用變量的作用域同PASCAL,常量為全局的,無標號8PL/0非形式描述語句類型:賦值語句,if...then...,while...do...,read,wri
4、te,call,復合語句begin...end,說明語句:const...,var...,procedure…13個保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd9PL/0的語法描述圖語句constidentnumber=,;varident,procedureident分程序分程序;;;分程序.程序10PL/0語言文法的EBNF表示BNF與EBNF的介紹BNF(BACKUS-NAURFORM)是根據(jù)美國的JohnW.Bac
5、kus與丹麥的PeterNaur來命名的,它從語法上描述程序設計語言的元語言。采用BNF就可說明哪些符號序列是對于某給定語言在語法上有效的程序。11PL/0語言文法的EBNF表示BNF與EBNF的介紹BNF引入的符號:<>用左右尖括號括起來的語法成分為非終結(jié)符∷=‘定義為’
6、‘或’EBNF引入的符號:{}表示花括號內(nèi)的語法成分可重復[]表示方括號內(nèi)的語法成分為任選項()表示圓括號內(nèi)的成分優(yōu)先12PL/0語言文法的EBNF表示BNF與EBNF的介紹一個用EBNF描述的例子:<整數(shù)>∷=[+
7、-]<
8、數(shù)字>{<數(shù)字>}<數(shù)字>∷=0
9、1
10、2
11、3
12、4
13、5
14、6
15、7
16、8
17、913PL/0語言文法的EBNF表示BNF與EBNF的介紹<整數(shù)>∷=[+
18、-]<非零數(shù)字>{<數(shù)字>}
19、0<非零數(shù)字>∷=1
20、2
21、3
22、4
23、5
24、6
25、7
26、8
27、9<數(shù)字>∷=0
28、1
29、2
30、3
31、4
32、5
33、6
34、7
35、8
36、914PL/0語言文法的EBNF表示PL/0語言文法的EBNF表示〈程序〉∷=〈分程序〉.〈分程序〉∷=[〈常量說明部分〉][〈變量說明部分〉][〈過程說明部分〉]〈語句〉〈常量說明部分〉∷=CONST〈常量定義部分〉{,〈常量定義〉
37、};〈無符號整數(shù)〉∷=〈數(shù)字〉{〈數(shù)字〉}〈變量說明部分〉∷=VAR〈標識符〉{,〈標識符〉};〈標識符〉∷=〈字母〉{〈字母〉
38、〈數(shù)字〉}……15認識目標代碼pcode目標代碼pcode是一種假想棧式計算機的匯編語言。指令格式flaf功能碼l層次差a根據(jù)不同的指令有所區(qū)別16170jmp081jmp022int033lod134lit0105opr02次棧頂與棧頂相加6sto147opr008int05在運行棧中申請5個棧空間9opr016從命令行讀入輸入置于棧頂10sto03將棧頂值存入變量11cal02
39、調(diào)用過程12lod04將變量取至棧頂13opr014棧頂值輸出至屏幕14opr015換行15opr00SL0DL0RA0變量1變量2RA12SL0DL0運行棧consta=10;varb,c;procedurep;beginc:=b+a;end;beginread(b);callp;write(c);end.SL:靜態(tài)鏈DL