資源描述:
《第二章PL0編譯程序的實(shí)現(xiàn)ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第2章PL/0編譯程序的實(shí)現(xiàn)本章要點(diǎn)掌握語(yǔ)言的形式化描述:語(yǔ)法描述圖與巴科斯范式EBNF。以PL/0為例學(xué)習(xí)編譯程序?qū)崿F(xiàn)的基本步驟和相關(guān)技術(shù),熟悉并理解編譯程序的基本原理和概念。對(duì)于一段給定的程序,給出其形式化描述術(shù)語(yǔ)元語(yǔ)言(metalanguage):用以描述另一種語(yǔ)言的語(yǔ)法或語(yǔ)義的形式化的語(yǔ)言。2.1PL/0語(yǔ)言概述PL/0語(yǔ)言:PASCAL語(yǔ)言的子集數(shù)據(jù)類型只有整型。標(biāo)識(shí)符的有效長(zhǎng)度是10,以字母開始的字母數(shù)字串。數(shù)值最多為14位。過(guò)程無(wú)參數(shù),可嵌套定義(最多三層),可遞歸調(diào)用。變量的作用域同PASCAL,常量為全局的,無(wú)標(biāo)號(hào)。PL/0非形式化描述語(yǔ)句類型:賦值語(yǔ)句,read,w
2、rite,call,if...then...,while...do...,復(fù)合語(yǔ)句:begin...end,說(shuō)明語(yǔ)句:const...,var...,procedure…13個(gè)保留字:if,then,while,do,read,write,call,begin,end,const,var,procedure,odd2.1.1PL/0語(yǔ)言的語(yǔ)法描述圖程序語(yǔ)法描述圖程序分程序?內(nèi)的文字表示非終結(jié)符內(nèi)的文字或符號(hào)表示終結(jié)符分程序語(yǔ)法描述圖constidentnumber=,var;ident;,語(yǔ)句分程序(過(guò)程)語(yǔ)法描述圖procedureident;;分程序語(yǔ)句語(yǔ)法描述圖ident:=表達(dá)
3、式identcallendbegin語(yǔ)句語(yǔ)句;if條件語(yǔ)句then語(yǔ)句語(yǔ)法描述圖while表達(dá)式identdowrite語(yǔ)句,條件read()(),空語(yǔ)句條件語(yǔ)法描述圖odd>=表達(dá)式表達(dá)式<=<#=>表達(dá)式表達(dá)式語(yǔ)法描述圖項(xiàng)項(xiàng)+-+-項(xiàng)語(yǔ)法描述圖因子因子*/因子語(yǔ)法描述圖identnumber()表達(dá)式2.1.2PL/0語(yǔ)言文法的EBNF表示BNF(BACKUS-NAURFORM)是根據(jù)美國(guó)的JohnW.Backus與丹麥的PeterNaur來(lái)命名的,它從語(yǔ)法上描述程序設(shè)計(jì)語(yǔ)言的元語(yǔ)言(metalanguage)。采用BNF就可說(shuō)明哪些符號(hào)序列是對(duì)于某給定語(yǔ)言在語(yǔ)法上有效的程序。EB
4、NF—擴(kuò)展的巴科斯范式(ExtendedBACKUS-NAURFORM)PL/0語(yǔ)言文法的EBNF表示表示的符號(hào)說(shuō)明:<>語(yǔ)法單位,語(yǔ)法成分為非終結(jié)符::=語(yǔ)法定義,左部由右部定義
5、‘或’,多個(gè)右部定義{}花括號(hào)內(nèi)的語(yǔ)法成分可重復(fù)多次[]方括號(hào)內(nèi)的語(yǔ)法成分為任選項(xiàng)()圓括號(hào)內(nèi)的成分為優(yōu)先選項(xiàng)EBNF巴科斯范式<程序>::=<分程序>.<分程序>::=[<常量說(shuō)明部分>][<變量說(shuō)明部分>][<過(guò)程說(shuō)明部分>]<語(yǔ)句><常量說(shuō)明部分>::=CONST<常量定義>{,<常量定義>}<常量定義>::=<標(biāo)識(shí)符>=<無(wú)符號(hào)整數(shù)><無(wú)符號(hào)整數(shù)>::=<整數(shù)>{<整數(shù)>}EBNF巴科斯范式<變量說(shuō)
6、明部分>::=VAR<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>}<標(biāo)識(shí)符>::=<字母>{<字母>
7、<數(shù)字>}<過(guò)程說(shuō)明部分>::=<過(guò)程首部><分程序>{,<過(guò)程說(shuō)明部分>}<過(guò)程首部>::=PROCEDURE<標(biāo)識(shí)符>;EBNF巴科斯范式<語(yǔ)句>::=<賦值語(yǔ)句>
8、<條件語(yǔ)句>
9、<當(dāng)型循環(huán)語(yǔ)句>
10、<過(guò)程調(diào)用語(yǔ)句>
11、<讀語(yǔ)句>
12、<寫語(yǔ)句>
13、<復(fù)合語(yǔ)句>
14、<空語(yǔ)句><賦值語(yǔ)句>::=<標(biāo)識(shí)符>:=<表達(dá)式><復(fù)合語(yǔ)句>::=BEGIN<語(yǔ)句>{;<語(yǔ)句>}END<條件>::=ODD<表達(dá)式>
15、<表達(dá)式><關(guān)系運(yùn)算符><表達(dá)式>EBNF巴科斯范式<表達(dá)式>::=[+
16、-]<項(xiàng)>{<加法運(yùn)算符><項(xiàng)>}<項(xiàng)
17、>::=<因子>{<無(wú)符號(hào)整數(shù)><因子>}<因子>::=<標(biāo)識(shí)符><乘法運(yùn)算符>
18、‘(’<表達(dá)式>‘)’<加法運(yùn)算符>::=+
19、-<乘法運(yùn)算符>::=*
20、/<關(guān)系運(yùn)算符>::==
21、#
22、<
23、<=
24、>
25、>=EBNF巴科斯范式<條件語(yǔ)句>::=IF<條件>THEN<語(yǔ)句><過(guò)程調(diào)用語(yǔ)句>::=CALL<標(biāo)識(shí)符><當(dāng)型循環(huán)語(yǔ)句>::=WHILE<條件>DO<語(yǔ)句><讀語(yǔ)句>::=READ(<標(biāo)識(shí)符>{,<標(biāo)識(shí)符>})<寫語(yǔ)句>::=WRITE(<表達(dá)式>{,<表達(dá)式>})<字母>::=a
26、b
27、c
28、……
29、X
30、Y
31、Z<數(shù)字>::=0
32、1
33、2
34、3
35、4
36、5
37、6
38、7
39、8
40、9PL/0編譯程序pcode解釋
41、程序PL/0源程序pcode代碼注:此處的pcode代碼專指PL/0的目標(biāo)碼,注意與傳統(tǒng)pcode的區(qū)別2.2PL/0編譯程序的結(jié)構(gòu)PL/0編譯程序PL/0源程序表格管理程序詞法分析程序代碼生成程序出錯(cuò)處理程序語(yǔ)法分析程序目標(biāo)程序PL/0程序示例CONSTA=10;(*常量說(shuō)明部分*)VARB,C;(*變量說(shuō)明部分*)PROCEDUREP;VARD;PROCEDUREQ;VARX;BEGINREAD(X);D:=X;WHILEX#0DOC