資源描述:
《PL0編譯程序的實(shí)現(xiàn)(4學(xué)時(shí))》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第2章PL/0編譯程序的實(shí)現(xiàn)2.1PL/0語(yǔ)言描述2.2PL/0編譯程序的結(jié)構(gòu)2.3PL/0編譯程序的詞法分析2.4PL/0編譯程序的語(yǔ)法語(yǔ)義分析2.5PL/0編譯程序的目標(biāo)代碼結(jié)構(gòu)和代碼生成2.6PL/0編譯程序的語(yǔ)法錯(cuò)誤處理2.7PL/0編譯程序的目標(biāo)代碼解釋執(zhí)行時(shí)的存儲(chǔ)分配何為PL/0語(yǔ)言?PL/0語(yǔ)言:PASCAL語(yǔ)言的子集,功能簡(jiǎn)單,結(jié)構(gòu)清晰,可讀性強(qiáng),具備了一般高級(jí)語(yǔ)言的必備部分。PL/0程序示例:CONSTA=10;VARB,C;PROCEDUREP;VARD;PROCEDUREQ;VARX;BEGINREAD(X);D:=X;
2、WHILEX#0DOCALLP;END;BEGINWRITE(D);CALLQ;END;BEGINCALLP;END.PL/0編譯程序pcode解釋程序PL/0源程序注:此處的pcode代碼專指PL/0的目標(biāo)代碼,與傳統(tǒng)pcode有區(qū)別pcode代碼2021/9/192.1PL/0語(yǔ)言描述語(yǔ)法描述的目的:用有窮的文法形式,描述(驗(yàn)證)無(wú)窮的句子形式。語(yǔ)法描述的常用形式:非形式化描述(不規(guī)范)語(yǔ)法描述圖:直觀、易讀。EBNF(擴(kuò)充的巴科斯-瑙爾范式)NEXTPL/0語(yǔ)言的非形式描述數(shù)據(jù)類型只有整型標(biāo)識(shí)符的有效長(zhǎng)度是10,以字母開始的字母數(shù)字串
3、過(guò)程無(wú)參,可嵌套(最多三層),可遞歸調(diào)用變量的作用域同PASCAL,常量為全局的,無(wú)標(biāo)語(yǔ)句類型:賦值語(yǔ)句,if...then...,while...do...,read,write,call,復(fù)合語(yǔ)句begin...end,說(shuō)明語(yǔ)句:const...,var...,procedure…13個(gè)保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd2021/9/19PL/0語(yǔ)言的語(yǔ)法描述圖(1)終結(jié)符VT語(yǔ)法成分中的最小單位,構(gòu)成語(yǔ)言文法的單詞。橢圓或圓圈內(nèi)的單詞表示VT
4、(2)非終結(jié)符VN語(yǔ)法成分,在書寫程序時(shí)并不出現(xiàn),但可一直追溯成VT表示的形式。矩形內(nèi)的符號(hào)表示VN(13-15頁(yè))BNF(BACKUS-NAURFORM)是根據(jù)美國(guó)的JohnW.Backus與丹麥的PeterNaur來(lái)命名的,它從語(yǔ)法上描述程序設(shè)計(jì)語(yǔ)言的元語(yǔ)言。采用BNF可說(shuō)明哪些符號(hào)序列是對(duì)于某給定語(yǔ)言在語(yǔ)法上有效的程序。BNF引入的符號(hào):<>表示語(yǔ)法構(gòu)造成分(語(yǔ)法單位),為非終結(jié)符∷=‘定義為’
5、‘或’EBNF引入的符號(hào):{}表示花括號(hào)內(nèi)的語(yǔ)法成分可重復(fù)[]表示方括號(hào)內(nèi)的語(yǔ)法成分為任選項(xiàng)()表示圓括號(hào)內(nèi)的成分優(yōu)先PL/0語(yǔ)言文法的EBNF表示8兩
6、個(gè)用EBNF描述“整數(shù)”的例子<整數(shù)>∷=[+
7、-]<數(shù)字>{<數(shù)字>}<數(shù)字>∷=0
8、1
9、2
10、3
11、4
12、5
13、6
14、7
15、8
16、9或<整數(shù)>∷=[+
17、-]<非零數(shù)字>{<數(shù)字>}
18、0<非零數(shù)字>∷=1
19、2
20、3
21、4
22、5
23、6
24、7
25、8
26、9<數(shù)字>∷=0
27、1
28、2
29、3
30、4
31、5
32、6
33、7
34、8
35、9PL/0語(yǔ)言文法參見P15,16練習(xí):P.31題6(2)(3)92.2PL/0編譯程序的結(jié)構(gòu)PL/0編譯過(guò)程采用一趟掃描方式以語(yǔ)法語(yǔ)義分析程序?yàn)楹诵?詞法分析程序和代碼生成程序都作為一個(gè)獨(dú)立的過(guò)程。當(dāng)語(yǔ)法分析需要讀單詞時(shí),就調(diào)用詞法分析程序當(dāng)語(yǔ)法分析正確需要生成相應(yīng)的目標(biāo)代碼時(shí),則調(diào)
36、用代碼生成程序用表格管理程序建立變量、常量和過(guò)程標(biāo)識(shí)符的說(shuō)明與引用之間的信息聯(lián)系。用出錯(cuò)處理程序?qū)υ~法和語(yǔ)法分析遇到的錯(cuò)誤,給出在源程序中出錯(cuò)的位置和錯(cuò)誤性質(zhì)。10語(yǔ)法語(yǔ)義分析程序詞法分析程序表格管理程序出錯(cuò)處理程序代碼生成程序目標(biāo)程序PL/0編譯程序的結(jié)構(gòu)圖PL/0源程序目標(biāo)程序解釋執(zhí)行程序輸入數(shù)據(jù)結(jié)果編譯過(guò)程解釋執(zhí)行過(guò)程11編譯程序總體流程圖17頁(yè)12所需識(shí)別的單詞:關(guān)鍵字:如BEGIN、END、IF、THEN等運(yùn)算符:如+、-、*、/、:=、#、>=、<=等標(biāo)識(shí)符:用戶定義的變量名、常數(shù)名、過(guò)程名常數(shù):如10、25、100等整數(shù)界符:如,.;()
37、等2.3PL/0編譯程序的詞法分析詞法分析過(guò)程GETSYM所要完成的任務(wù):濾空格、識(shí)別保留字、識(shí)別標(biāo)識(shí)符、拼數(shù)、拼復(fù)合詞、輸出源程序參見P.19圖通過(guò)三個(gè)全程量將識(shí)別出的單詞信息傳遞給語(yǔ)法分析程序SYM:存放單詞的類別,如beginsym,ident,numberID:存放用戶所定義的標(biāo)識(shí)符的值NUM:存放用戶定義的數(shù)13程序pl/0分程序block語(yǔ)句statement條件condition表達(dá)式expression項(xiàng)term因子factor2.4PL/0編譯程序的語(yǔ)法語(yǔ)義分析語(yǔ)法分析的任務(wù):識(shí)別由詞法分析給出的單詞符號(hào)序列在“結(jié)構(gòu)”上是否符合給定的
38、“文法規(guī)則”。語(yǔ)法分析的過(guò)程:從讀入第一個(gè)單詞開始,由VN“程序”出發(fā),沿語(yǔ)法圖箭頭所指進(jìn)行分