程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯_第1頁(yè)
程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯_第2頁(yè)
程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯_第3頁(yè)
程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯_第4頁(yè)
程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法與翻譯第1頁(yè),共44頁(yè),2023年,2月20日,星期二第四章程序設(shè)計(jì)語(yǔ)言常用的

語(yǔ)法與翻譯方法信息學(xué)院軟件工程教研室第2頁(yè),共44頁(yè),2023年,2月20日,星期二4.1逆波蘭表示法

逆波蘭表示表達(dá)式高級(jí)語(yǔ)言表示表達(dá)式

ab* a*b

ab*c+ a*b+c

abcd/+* a*(b+c/d)

ab*cd*+ a*b+c*d信息學(xué)院軟件工程教研室第3頁(yè),共44頁(yè),2023年,2月20日,星期二高級(jí)語(yǔ)言表達(dá)式E的逆波蘭表示法可這樣定義:(1)若E是高級(jí)語(yǔ)言中的一個(gè)變量或常數(shù),則E的逆波蘭表示式仍是E。(2)若高級(jí)語(yǔ)言中的表達(dá)式為E1opE2,其中,op是一個(gè)二元算符,E1、E2也是表達(dá)式,則逆波蘭式表示為E1'E2'op,其中,E1'是E1的逆波蘭式,E2'是E2的逆波蘭式。(3)若高級(jí)語(yǔ)言中的表達(dá)式為(E),則逆波蘭表示式為去掉括號(hào)的E',E'為E的逆波蘭表示式。信息學(xué)院軟件工程教研室第4頁(yè),共44頁(yè),2023年,2月20日,星期二三地址代碼是由下面一般形式的語(yǔ)句構(gòu)成的序列。x:=yopz其中x、y、z是變量名或編譯時(shí)產(chǎn)生的臨時(shí)變量名;y、z還可以是常數(shù);op代表某種操作符。這種中間語(yǔ)言的特點(diǎn)有兩個(gè)。(1)非常接近匯編語(yǔ)言形式,包括匯編語(yǔ)言中最基本的操作。(2)每個(gè)語(yǔ)句中賦值號(hào)的右邊只有一個(gè)操作符,使得句子意義最小且不可分。例如,源語(yǔ)言表達(dá)式x+y*z可被翻譯成如下的句子序列:T1:=y*zT2:=x+T14.2三地址代碼信息學(xué)院軟件工程教研室第5頁(yè),共44頁(yè),2023年,2月20日,星期二三地址代碼的語(yǔ)句形式可分為兩類:一類是帶有各種運(yùn)算操作的賦值語(yǔ)句第二類是轉(zhuǎn)移語(yǔ)句三地址碼語(yǔ)句可看成是一種中間代碼的抽象形成,在編譯程序中,三地址代碼的具體實(shí)現(xiàn)常以記錄的形式表示,通常有3種表示方法:四元式、三元式、間接三元式信息學(xué)院軟件工程教研室第6頁(yè),共44頁(yè),2023年,2月20日,星期二4.3程序設(shè)計(jì)語(yǔ)言常用語(yǔ)法4.3.1表達(dá)式語(yǔ)法(算術(shù))4.3.2賦值語(yǔ)句4.3.3if語(yǔ)句4.3.4循環(huán)語(yǔ)句4.3.5說(shuō)明語(yǔ)句4.3.6函數(shù)的定義與調(diào)用4.3.7程序語(yǔ)句序列文法信息學(xué)院軟件工程教研室第7頁(yè),共44頁(yè),2023年,2月20日,星期二4.3.1表達(dá)式語(yǔ)法(算術(shù))根據(jù)算術(shù)表達(dá)式的定義,一般算術(shù)表達(dá)式記為E,其文法被定義為:E→EopE (op為雙目操作符)E→opE (op為單目操作符)E→D|id (D為數(shù)字,id為標(biāo)識(shí)符號(hào))這是一個(gè)無(wú)法直接使用的二義性文法,必須使用前述兩種消除二義性文法的策略將文法中的二義性表達(dá)加以限制或改寫(xiě)。信息學(xué)院軟件工程教研室第8頁(yè),共44頁(yè),2023年,2月20日,星期二對(duì)這種表達(dá)式保留文法的二義性也有好處。不過(guò)在作語(yǔ)法分析時(shí)要規(guī)定算符間的優(yōu)先關(guān)系和結(jié)合順序,這樣才能確定語(yǔ)句的最終意義。這就是常用于表達(dá)式語(yǔ)法分析的算符優(yōu)先分析法。信息學(xué)院軟件工程教研室第9頁(yè),共44頁(yè),2023年,2月20日,星期二無(wú)二義的表達(dá)式文法一般定義為:

無(wú)論采用哪一種文法形式,只要最終語(yǔ)句的意義是確定、不含糊的,并且是統(tǒng)一的,那么同一個(gè)語(yǔ)句所對(duì)應(yīng)的抽象語(yǔ)法樹(shù)就是相同的。信息學(xué)院軟件工程教研室第10頁(yè),共44頁(yè),2023年,2月20日,星期二4.3.2賦值語(yǔ)句賦值語(yǔ)句的文法最簡(jiǎn)單,定義為:

其中,是一個(gè)名字,它表示各種類型的變量,包括下標(biāo)變量(數(shù)組)。“=”是賦值號(hào),E是表達(dá)式,賦值語(yǔ)句的語(yǔ)義是把賦值號(hào)右邊表達(dá)式的值放到賦值號(hào)左邊名字所指的地址中去。信息學(xué)院軟件工程教研室第11頁(yè),共44頁(yè),2023年,2月20日,星期二對(duì)賦值語(yǔ)句文法定義的句子而言,相應(yīng)的抽象語(yǔ)法樹(shù)如圖所示。信息學(xué)院軟件工程教研室第12頁(yè),共44頁(yè),2023年,2月20日,星期二4.3.3if語(yǔ)句if語(yǔ)句是控制語(yǔ)句的一種,它的文法被定義為:這個(gè)語(yǔ)法有兩個(gè)候選式,這兩個(gè)候選式的前半部分是一樣的,即:。也就是說(shuō),在一個(gè)符號(hào)串之后可能緊跟一個(gè)或跟其他的符號(hào)串。由于可選的影響,這個(gè)文法有二義性的,即所謂“懸掛問(wèn)題”。信息學(xué)院軟件工程教研室第13頁(yè),共44頁(yè),2023年,2月20日,星期二考慮以下符號(hào)串:其中,符號(hào)E1、E2、S1、S2都是由終結(jié)符組成的符號(hào)串。這個(gè)串有兩個(gè)分析樹(shù)該語(yǔ)法樹(shù)把看作與其最近的同屬一層該語(yǔ)法樹(shù)把看作與整句之首的同屬一層信息學(xué)院軟件工程教研室第14頁(yè),共44頁(yè),2023年,2月20日,星期二改寫(xiě)的文法如下:這個(gè)文法用非終結(jié)符M單獨(dú)定義可嵌套的if…else語(yǔ)句。它是無(wú)二義的,只是有些累贅,也不太容易理解。實(shí)際上,并不是所有的語(yǔ)句文法一定會(huì)存在懸掛,有些語(yǔ)言的設(shè)計(jì)就避免了這個(gè)問(wèn)題。如果所有的語(yǔ)句都有結(jié)尾,或其他類似符號(hào)結(jié)尾,就不存在這個(gè)問(wèn)題了。

信息學(xué)院軟件工程教研室第15頁(yè),共44頁(yè),2023年,2月20日,星期二語(yǔ)句又稱分支語(yǔ)句。在C中,它的語(yǔ)義是根據(jù)表達(dá)式的值決定是否執(zhí)行語(yǔ)句S或執(zhí)行兩個(gè)語(yǔ)句S中的某一個(gè)。仔細(xì)分析一下語(yǔ)句的符號(hào)串,真正有可執(zhí)行意義的符號(hào)只有E和S兩個(gè)非終結(jié)符,其他終結(jié)符只是標(biāo)記符號(hào)串的結(jié)構(gòu)形式。因此,在建立抽象語(yǔ)法樹(shù)的時(shí)候,我們可以擺脫那些沒(méi)有意義的符號(hào)。信息學(xué)院軟件工程教研室第16頁(yè),共44頁(yè),2023年,2月20日,星期二上圖所示是語(yǔ)句抽象語(yǔ)法樹(shù)的結(jié)構(gòu)。這是一棵有三棵子樹(shù)的抽象語(yǔ)法樹(shù),最左邊的子樹(shù)是表達(dá)式,這里一般都是關(guān)系表達(dá)式和邏輯表達(dá)式,但是有些C語(yǔ)言里也用算術(shù)表達(dá)式。最右邊的子樹(shù)是可選句子,所以用虛線連接。信息學(xué)院軟件工程教研室第17頁(yè),共44頁(yè),2023年,2月20日,星期二4.3.4循環(huán)語(yǔ)句循環(huán)語(yǔ)句也有各種不同的情況,但實(shí)質(zhì)是一樣的,其一般的語(yǔ)法形式也很簡(jiǎn)單,如下:對(duì)應(yīng)的抽象語(yǔ)法樹(shù)如圖所示。信息學(xué)院軟件工程教研室第18頁(yè),共44頁(yè),2023年,2月20日,星期二說(shuō)明語(yǔ)句用以定義各種名字的數(shù)據(jù)類型。與表達(dá)式和控制語(yǔ)句不同的是,說(shuō)明語(yǔ)句不會(huì)被翻譯成可執(zhí)行代碼,因此也不會(huì)被翻譯成中間代碼。說(shuō)明語(yǔ)句實(shí)質(zhì)是為名字確定存儲(chǔ)空間或過(guò)程、函數(shù)的起始地址。說(shuō)明語(yǔ)句也可以生成語(yǔ)法樹(shù),通過(guò)語(yǔ)法樹(shù)來(lái)確定各個(gè)名字的類型。由于說(shuō)明語(yǔ)句沒(méi)有嵌套,所以沒(méi)有層次。因此它的抽象語(yǔ)法樹(shù)蛻化成一個(gè)鏈表。所謂類型,其實(shí)質(zhì)就是存儲(chǔ)控制。信息學(xué)院軟件工程教研室第19頁(yè),共44頁(yè),2023年,2月20日,星期二4.1.5說(shuō)明語(yǔ)句名字本身則與存儲(chǔ)地址或過(guò)程函數(shù)入口地址關(guān)聯(lián),說(shuō)明語(yǔ)句的語(yǔ)法為:這里,D可理解為說(shuō)明語(yǔ)句。T是類型標(biāo)識(shí)集合,L是變量表,是變量名。說(shuō)明語(yǔ)句常與符號(hào)表配合使用,所謂符號(hào)表就是名字登記表,那里保存著與名字相關(guān)的信息。信息學(xué)院軟件工程教研室第20頁(yè),共44頁(yè),2023年,2月20日,星期二4.3.7程序語(yǔ)句序列文法程序是由語(yǔ)句序列組成的,語(yǔ)句序列的文法可表示為:這是用分號(hào)分隔開(kāi)的語(yǔ)句序列。由于語(yǔ)句間的并列意義,故仍以鏈表表示為最好,對(duì)應(yīng)的結(jié)構(gòu)如下圖所示。信息學(xué)院軟件工程教研室第21頁(yè),共44頁(yè),2023年,2月20日,星期二其中,三角形表示潛在的子樹(shù)。由前文可知,各種各樣的語(yǔ)句經(jīng)語(yǔ)法分析后都有與之對(duì)應(yīng)的語(yǔ)法樹(shù)。實(shí)際上,每個(gè)程序在語(yǔ)法分析之前可看成一個(gè)長(zhǎng)長(zhǎng)的詞串,而在語(yǔ)法分析之后就變成一棵整體的語(yǔ)法樹(shù)。下面通過(guò)一個(gè)例子來(lái)說(shuō)明。P45-列4.1信息學(xué)院軟件工程教研室第22頁(yè),共44頁(yè),2023年,2月20日,星期二4.4中間代碼的翻譯4.4.1表達(dá)式中間代碼4.4.2if語(yǔ)句中間代碼生成4.4.3布爾表達(dá)式代碼生成4.4.4循環(huán)語(yǔ)句中間代碼4.4.5綜合實(shí)例信息學(xué)院軟件工程教研室第23頁(yè),共44頁(yè),2023年,2月20日,星期二1.逆波蘭式的生成4.4.1表達(dá)式中間代碼信息學(xué)院軟件工程教研室第24頁(yè),共44頁(yè),2023年,2月20日,星期二2.四元式的生成表達(dá)式的四元式變換如下所示:是編譯過(guò)程中的臨時(shí)變量,用以存儲(chǔ)中間結(jié)果。

其中,信息學(xué)院軟件工程教研室第25頁(yè),共44頁(yè),2023年,2月20日,星期二4.4.2if語(yǔ)句中間代碼生成if語(yǔ)句翻譯成中間代碼時(shí),變成對(duì)布爾表達(dá)式的判斷與轉(zhuǎn)移組合。所生成的四元式中間代碼由兩條基本語(yǔ)句組成:信息學(xué)院軟件工程教研室第26頁(yè),共44頁(yè),2023年,2月20日,星期二語(yǔ)句有兩種形式:形式1:(E)S信息學(xué)院軟件工程教研室第27頁(yè),共44頁(yè),2023年,2月20日,星期二形式2:信息學(xué)院軟件工程教研室第28頁(yè),共44頁(yè),2023年,2月20日,星期二根據(jù)這個(gè)語(yǔ)義的關(guān)系將其相應(yīng)的抽象語(yǔ)法圖翻譯為固定的四元式格式。(E的四元式,值存入T)next:(后續(xù)程序四元式)信息學(xué)院軟件工程教研室第29頁(yè),共44頁(yè),2023年,2月20日,星期二在語(yǔ)句中,表達(dá)式E的作用是提供選擇執(zhí)行語(yǔ)句S1還是S2的判斷。因此不必保留E的值,而是將計(jì)算結(jié)果表示為程序執(zhí)行流程的轉(zhuǎn)移。此時(shí)E的值只需有兩個(gè)即可。所以E被視為布爾表達(dá)式。E的真值被轉(zhuǎn)換為一個(gè)條件轉(zhuǎn)移,稱為“真出口”。E的假值被轉(zhuǎn)換為一個(gè)無(wú)條件轉(zhuǎn)移,稱為“假出口”。信息學(xué)院軟件工程教研室第30頁(yè),共44頁(yè),2023年,2月20日,星期二最簡(jiǎn)單的情況E是一個(gè)布爾變量a,那么有:真出口假出口信息學(xué)院軟件工程教研室第31頁(yè),共44頁(yè),2023年,2月20日,星期二另外,布爾量間的運(yùn)算除了一般的布爾代數(shù)運(yùn)算外,還有一種運(yùn)算方法,稱為“短路布爾操作”。它的意義是:對(duì)于一個(gè)二元布爾操作,如果根據(jù)第1個(gè)布爾量的值就可以判斷這個(gè)布爾結(jié)果,那么就不必計(jì)算第2個(gè)布爾量了。就是說(shuō),在某種情況下第2個(gè)布爾量被短路了。信息學(xué)院軟件工程教研室第32頁(yè),共44頁(yè),2023年,2月20日,星期二例如,對(duì)于二元操作aandb,如果a是假,不管b是什么,aandb的結(jié)果都是假。所以

b就不用計(jì)算了。再如,二元操作aorb,如果a是真,不管b是什么,aorb的結(jié)果都是真。所以b就可以被短路掉,這種短路的操作對(duì)代碼來(lái)說(shuō)是很重要的。有些時(shí)候,沒(méi)被短路的操作會(huì)引起錯(cuò)誤。例如:信息學(xué)院軟件工程教研室第33頁(yè),共44頁(yè),2023年,2月20日,星期二這是C語(yǔ)言中常見(jiàn)的語(yǔ)句,但如果出現(xiàn)p==NULL時(shí)還要對(duì)求值將引起內(nèi)存錯(cuò)誤。信息學(xué)院軟件工程教研室第34頁(yè),共44頁(yè),2023年,2月20日,星期二短路的布爾操作類似于if語(yǔ)句,它們經(jīng)常用if表達(dá)式定義,例如:將E1的真出口轉(zhuǎn)移至E2的第1個(gè)四元式的假出口與全句假出口并聯(lián)(相同),E2的真出口就是全句的真出口,E2的假出口也是全句的假出口。將E1的真出口與全句的真出口并聯(lián),E1的假出口轉(zhuǎn)移至E2的第1個(gè)四元式,E2的真出口是全句的真出口,E2的假出口是全句的假出口。信息學(xué)院軟件工程教研室第35頁(yè),共44頁(yè),2023年,2月20日,星期二4.4.4循環(huán)語(yǔ)句中間代碼循環(huán)語(yǔ)句的一般語(yǔ)法為:信息學(xué)院軟件工程教研室第36頁(yè),共44頁(yè),2023年,2月20日,星期二信息學(xué)院軟件工程教研室第37頁(yè),共44頁(yè),2023年,2月20日,星期二循環(huán)語(yǔ)句生成的四元式序列的結(jié)構(gòu)如下:next:(后續(xù)程序四元式)信息學(xué)院軟件工程教研室第38頁(yè),共44頁(yè),2023年,2月20日,星期二4.4.5綜合實(shí)例【例】有語(yǔ)句如下:While(A>BorC>D)if(x==0)x=y*z;elsex=y+z;求四元式序列(翻譯)。信息學(xué)院軟件工程教研室第39頁(yè),共44頁(yè),2023年,2月20日,星期二解:(1)求出該句的語(yǔ)法樹(shù)信息學(xué)院軟件工程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論