語法制導翻譯和中間代碼生成2

語法制導翻譯和中間代碼生成2

ID:39707070

大小:802.50 KB

頁數(shù):81頁

時間:2019-07-09

語法制導翻譯和中間代碼生成2_第1頁
語法制導翻譯和中間代碼生成2_第2頁
語法制導翻譯和中間代碼生成2_第3頁
語法制導翻譯和中間代碼生成2_第4頁
語法制導翻譯和中間代碼生成2_第5頁
資源描述:

《語法制導翻譯和中間代碼生成2》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第四、五章 語法制導翻譯和中間代碼生成概述語法分析之后,編譯的任務是由已識別為正確的源程序生成一組規(guī)格一致,便于計算機加工的指令形式。一、中間代碼生成方法語法制導翻譯,屬性文法制導翻譯中間代碼:不是機器語言,便于生成機器語言,便于代碼優(yōu)化。中間代碼的形式:逆波蘭式樹形表示法三元式四元式:最常用的形式二、翻譯方法1、屬性文法制導翻譯將文法的終結(jié)符、非終結(jié)符及動作符號附加以語義參數(shù),這些參數(shù)稱作為文法符號的屬性,從而構(gòu)成屬性文法。注:1)在屬性文法中是利用各種屬性作為語義動作之間的通信介質(zhì)2)一個文法符號可以和多個語義參數(shù)相關(guān)聯(lián)3)屬性可分為兩種:繼承屬性和綜合屬性。繼承屬性

2、值的計算規(guī)則是自上而下——產(chǎn)生式右部符號的某些值是根據(jù)其左部符號的屬性和右部其它符號的某些屬性計算而得。4)綜合屬性值的計算規(guī)則是自下而上——產(chǎn)生式左部符號的某些屬性值是根據(jù)其右部符號的屬性和左部其它符號的某些屬性計算而得。5)屬性翻譯的依據(jù)是屬性規(guī)則。6)屬性規(guī)則嵌入在產(chǎn)生式右部適當位置。2、語法制導翻譯在語法分析的基礎(chǔ)上進行邊分析邊翻譯。注:1)語法制導翻譯時會根據(jù)文法產(chǎn)生式右部符號串的含義,進行翻譯,翻譯的結(jié)果是生成相應中間代碼。2)語法制導翻譯的依據(jù)是語義子程序。3)具體做法:為每個產(chǎn)生式配置一個語義子程序,當語法分析進行歸約或推導時,調(diào)用語義子程序,完成一部分翻譯

3、任務。4)語法分析完成,翻譯工作也告結(jié)束。語法制導翻譯適用于多種語法分析。語法制導翻譯種類1、自上而下語法制導翻譯:對每個文法符號配以語義動作。2、自下而上語法制導翻譯:我們主要討論LR語法制導翻譯。三、語義子程序1、作用用來描述一個產(chǎn)生式所對應的翻譯工作。如:改變某些變量的值;查填各種符號表;發(fā)現(xiàn)并報告源程序錯誤;產(chǎn)生中間代碼等。注:這些翻譯工作很大程度上決定了要產(chǎn)生什么形式的中間代碼。2、寫法語義子程序?qū)懺谠摦a(chǎn)生式后面的花括號內(nèi)。Eg:X?α{語義子程序1}注:在一個產(chǎn)生式中同一個文法符號可能出現(xiàn)多次,但他們代表的是不同的語義值,要區(qū)分可以加上角標。如:E?E(1)+E

4、(2)3、語義值為了描述語義動作,需要為每個文法符號賦予不同的語義值:類型、地址、代碼值等。4、語義棧各個符號的語義值放在語義棧中當產(chǎn)生式進行歸約時,需對產(chǎn)生式右部符號的語義值進行綜合,其結(jié)果作為左部符號的語義值保存到語義棧中。下推棧包含3部分:狀態(tài)棧、符號棧和語義棧注:語義棧與狀態(tài)棧和符號棧是同步變化的。注:1)若把語義子程序改成產(chǎn)生某種中間代碼的動作,就能在語法分析制導下,隨著分析的進展逐步生成中間代碼。2)若把語義子程序改成產(chǎn)生某種機器的匯編語言指令,就能隨著分析的進展逐步生成某機器的匯編語言代碼。例如:產(chǎn)生式語義子程序(0)S`?E{PRINTE?VAL}(1)E?

5、E(1)+E(2){E?VAL=E(1)?VAL+E(2)?VAL}(2)E?E(1)*E(2){E?VAL=E(1)?VAL*E(2)?VAL}(3)E?(E(1)){E?VAL=E(1)?VAL}(4)E?i{E?VAL=LEXVAL}注:LEXVAL指的是詞法分析送來的機內(nèi)二進制整數(shù)四、常見的中間代碼形式1、四元式形式:(Operator,Operand1,Operand2,Result)注:1)Operand1,Operand2,Result可能是用戶自定義的變量,也可能是編譯時引進的變量。這里Operator是雙目運算符,若只有一個運算量,則是單目運算符。2)四元

6、式中變量采用符號表入口的地址,而不用變量的地址,因為語義分析不僅需要變量的地址,還需要從符號表查到的變量的屬性、類型和地址等。3)四元式的優(yōu)點是容易轉(zhuǎn)換為目標代碼和容易進行優(yōu)化。2、三元式(Operator,Operand1,Operand2)注:1)這里三元式本身作為存放結(jié)果的單元。2)為了在其它三元式中利用當前三元式的結(jié)果,需要對三元式進行編號。三元式的編號就作為相應三元式的結(jié)果值。3、后綴表示式(逆波蘭表達式)Operand1Operand2Operator4、樹形表示法注:常用中間代碼表示法是四元式。賦值語句的翻譯僅含簡單變量的表達式的賦值語句的翻譯1、賦值語句的文

7、法A?i=EE?E+E

8、E*E

9、-E

10、(E)

11、i2、需要的語義過程NEWTEMP函數(shù):每次調(diào)用送回一個代表新臨時變量的序號,可認為是送回T1、T2這樣的一些臨時變量ENTRY(i)函數(shù):用于查變量i的符號表入口地址GEN(OP,ARG1,ARG2,RESULT)過程:產(chǎn)生一個四元式,并填入四元式序列表。3、需要的語義變量E?PLACE:與非終結(jié)符E相聯(lián)系的語義變量值為某變量的符號表入口地址或臨時變量序號。它與文法的非終結(jié)符相聯(lián),分析過程需要就建立,不需要就消亡。產(chǎn)生式語義子程序(1)A?i=E{GEN(=,E?PL

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。