




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、7.3 中間代碼翻譯算法7.3.1 屬性文法A=(G, V, E); 【定義】 屬性文法是上下文無關(guān)文法在語義上的擴(kuò)展,可定義為如下三元組:其中:G(文法);V(屬性集);E(屬性規(guī)則集)。 屬性 代表與文法符號(hào)相關(guān)的信息,這里主要指語義信息(類型、種類、值和值地址);文法產(chǎn)生式中的每個(gè)文法符號(hào)都附有若干個(gè)這樣的屬性。 屬性可以進(jìn)行計(jì)算和傳遞,屬性規(guī)則就是在同一產(chǎn)生式中,相互關(guān)聯(lián)的屬性求值規(guī)則。 屬性分兩類(按屬性求值規(guī)則區(qū)分): 綜合屬性:其值由子女屬性值來計(jì)算(自底向上求值); 繼承屬性:其值由父兄屬性值來計(jì)算(自頂向下求值)。說明 屬性文法構(gòu)造示例 :【例7.7】 算術(shù)表達(dá)式的屬性文法;
2、 設(shè):X.val 為文法符號(hào) X 的值屬性; 下述屬性文法用于算術(shù)表達(dá)式的求值運(yùn)算:E - E1 + T ; | E.val:= E1.val + T.valT - T1 * F ; | T.val:= T1.val * F.valE - T ; | E.val:= T.valT - F ; | T.val:= F.valF - ( E ) ; | F.val:= E.valF - i ; | F.val:= i.valE - E1 - T ; | E.val:= E1.val - T.valT - T1 / F ; | T.val:= T1.val / F.val【注】可以看出: X.val
3、 屬性是綜合屬性。 屬性計(jì)算過程示例 : 根據(jù)算術(shù)表達(dá)式屬性文法及其相應(yīng)的屬性求值規(guī)則, 2+4*(5-9/3)的屬性語法樹:E.10E1.2 + T.8 T.2 T.4 * F.2 F.2 F.4 ( E.2 ) 2 4 E.5 - T.3 T.5 T.9 / F.3 F.5 F.9 3 5 9按 最左推導(dǎo)或 最左歸約 傳遞規(guī)則: 計(jì)算規(guī)則:7.3.2 語法制導(dǎo)翻譯技術(shù) 【定義】語法制導(dǎo)(syntax_directed)是指根據(jù)語言的形式文法對(duì)輸入序列進(jìn)行分析、翻譯處理;核心技術(shù)是構(gòu)造 翻譯文法 - 在源文法產(chǎn)生式中插入語義動(dòng)作符號(hào)(翻譯子程序),借以指明屬性文法中屬性求值時(shí)機(jī)和順序。 以算
4、術(shù)表達(dá)式文法為例,探討翻譯文法的構(gòu)造! 通俗地說,所謂語法制導(dǎo)翻譯技術(shù),是指: 語法分析技術(shù) 翻譯文法構(gòu)造技術(shù) +注 為敘述簡便起見,除非臨時(shí)詳細(xì)指明,標(biāo)識(shí)符 X 的屬性一律視為符號(hào)表項(xiàng)指針,同時(shí)用:X 表示 X.point !逆波蘭式翻譯文法構(gòu)造示例:符號(hào)串 a*(b+c)的分析(翻譯)過程(推導(dǎo)法):E=T=T*F* =F*F* =aa*F* =aa*(E)* =aa*(E+T+)* =ai*(T+T+)* 導(dǎo)出序列aa*(bb+cc+)* =+ 分解導(dǎo)出序列:去掉動(dòng)作符號(hào): a*(b+c) . 源表達(dá)式;去掉文法符號(hào): abc+* . 逆波蘭式;【例7.8】 算術(shù)表達(dá)式逆波蘭式翻譯文法
5、a:動(dòng)作符號(hào);含義:輸出(a)E - T | E+T+ | E-T-T - F | T*F* | T/F/F - ii | (E) G(E)注 四元式翻譯文法構(gòu)造示例1:. 從逆波蘭式的翻譯到四元式的翻譯: t1 = c / d t2 = t1 - e t3 = b * t2 t4 = a + t3四元式 則 算術(shù)表達(dá)式 a+b*(c/d-e) 的逆波蘭式算符進(jìn)棧之日,也就是四元式生成之時(shí)。重要結(jié)論逆波蘭式(生成)計(jì)算順序:a 即為 PUSH(a)- 逆波蘭式在棧中!假定:t3at1t2t4(結(jié)果)bcd/e-*+ GEQ() 表達(dá)式四元式生成函數(shù):G(E):E - T | E+TGEQ(+)
6、 | E-TGEQ(-) T - F | T*FGEQ(*) | T/FGEQ(/) F - iPUSH(i) | ( E ) 四元式翻譯文法構(gòu)造示例2:. 算術(shù)表達(dá)式四元式翻譯文法設(shè)計(jì)假定:SEM(m)- 語義棧(屬性傳遞、賦值場(chǎng)所); PUSH(i) 壓棧函數(shù)(把當(dāng)前 i 壓入語義棧);則:其中:QTq 四元式區(qū); t := NEWT; 申請(qǐng)臨時(shí)變量函數(shù); SEND( SEMm-1,SEMm,t) POP;POP;PUSH(t)生成一個(gè)四元式送QTq語義棧次棧頂、棧頂 動(dòng)作函數(shù)(序列)執(zhí)行過程示例 :G(E):E - T | E+TGEQ(+) | E-TGEQ(-) T - F | T*
7、FGEQ(*) | T/FGEQ(/) F - iPUSH(i) | ( E ) 對(duì)比 算術(shù)表達(dá)式 a*(b/c-d) 的逆波蘭式動(dòng)作序列:abc/d-* ;可得四元式動(dòng)作序列: QTq SEMm 動(dòng)作序列 a b c t2 PUSH(d) GEQ(-) GEQ(/) GEQ(*) PUSH(c) PUSH(b) PUSH(a)執(zhí)行過程 a a b a t1 d a b c a t1 d ( * a t2 t3 )( - t1 d t2 )( / b c t1 ) t3 a7.3.3 四元式翻譯文法設(shè)計(jì)擴(kuò)展1. 賦值語句四元式翻譯文法: S - vPUSH(v)=EASSI(=) ; ASSI
8、(=) - 賦值函數(shù); SEND(:= SEMm,_ ,SEMm-1 ); POP;POP; . 標(biāo)號(hào)、轉(zhuǎn)向語句四元式翻譯文法: S - i PUSH(i) :LABER(i) S ; S - goto iGOTO(i); LABER(i) - 標(biāo)號(hào)函數(shù); SEND( lb _ ,_ ,SEMm ); POP; GOTO(i) - 轉(zhuǎn)向函數(shù); SEND( gt _ ,_ ,i ); 7.3.3 四元式翻譯文法設(shè)計(jì)擴(kuò)展2. 條件語句四元式翻譯文法: S - if(R)IF(if)S;elseEL(el)SIE(ie) IF(if) - if 函數(shù); SEND( if SEMm, _ , _ );
9、 POP; IE(i) - ifend 函數(shù); SEND( ie _ ,_ ,_ ); EL(el) - else 函數(shù); SEND( el _ ,_ ,_ ); R - E E GEQ() GEQ() - 表達(dá)式四元式生成函數(shù); 其中的 為當(dāng)前匹配的關(guān)系算符。7.3.3 四元式翻譯文法設(shè)計(jì)擴(kuò)展3. 循環(huán)語句四元式翻譯文法: S - whileWH()(R)DO(do)SWE(we); WH(wh) - 循環(huán)頭 函數(shù); SEND( wh _ , _ , _ ); WE(we) - 循環(huán)尾 函數(shù); SEND( we _ ,_ ,_ ); 【注】文法中的 R 為 關(guān)系表達(dá)式(見條件語句四元式翻譯文
10、法)。 DO(el) - DO 函數(shù); SEND( do SEMm ,_ ,_ ); POP ; 7.3.3 四元式翻譯文法設(shè)計(jì)擴(kuò)展4 . 說明語句四元式翻譯文法: 說明語句的翻譯目標(biāo):填寫符號(hào)表 (1)原文法: D - id:T;D | id:TT - integer | real | array num of T | T(2)文法變換: D - id:TDD - ;id:TD | T - integer | real | array num of T | T(3)翻譯文法: D -INI()idNAME():TENT()DD -;idNAME():TENT()D | T -integerT
11、YP(i) -realTYP(r) -array numNUM() of TTYP(a) -TTYP()INI()-初始化 函數(shù); offset := 0 ; NAME()-標(biāo)識(shí)符 名字處理 函數(shù); := entry(id) ; ENT()-填寫符號(hào)表 函數(shù); enter( , T.type, offset );(2)offset := offset + T.width; TYP(x)-標(biāo)識(shí)符類型處理 函數(shù); T.type := x; T.width := x.width; NUM()-標(biāo)識(shí)符類型處理 函數(shù); num.val := val(num); 翻譯文法應(yīng)用
12、驗(yàn)證示例【例7.9】 已知條件語句 if(a if( R )IF(if) S ; IE(ie)E EGEQ()apush(a)aPUSH(a) = EASSI(=)E + TGEQ(+)TFapush(a)TFF1push(1)TFbpush(b) if(a0)a=a+1 四元式翻譯的動(dòng)作序列:push(a),push(a),push(b),GEQ(),IF(if),PUSH(a) push(1),GEQ(+),ASSI(=),IE(ie) 根據(jù)上述條件語句四元式翻譯的動(dòng)作序列,if(a0)a=a+1 的四元式生成過程:IF(if) push(a) push(b)push(a)push(1)GEQ(+)ASSI(=)IE(ie)PUSH(a)GEQ() QTq SEMm 動(dòng)作序列 a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 申論高原面試題及答案
- 2025勞動(dòng)合同司法解釋概述
- 《線性系統(tǒng)分析》課件
- 談美測(cè)試題及答案
- 2025年機(jī)載設(shè)備綜合測(cè)試臺(tái)項(xiàng)目發(fā)展計(jì)劃
- 2025全球軟件許可與技術(shù)合同
- 2025四川省農(nóng)產(chǎn)品購銷合同范本
- 《肺栓塞診治》課件
- 《教學(xué)大綱解析》課件
- 2025企業(yè)勞動(dòng)合同范本樣式
- 氨基酸多肽蛋白質(zhì)課件
- 被執(zhí)行人財(cái)產(chǎn)線索提供書(模板)
- 新技術(shù)、新工藝、對(duì)提高工程質(zhì)量、縮短工期、降低造價(jià)的可行性
- 金屬礦床地下開采復(fù)習(xí)題及答案
- Cpk 計(jì)算標(biāo)準(zhǔn)模板
- 【小升初】2023小學(xué)六年級(jí)人教版道德與法治升學(xué)畢業(yè)試卷及答案(時(shí)政+上下冊(cè)考點(diǎn))04
- 乳化液廢水處理方案
- 軍事航天技術(shù)
- 新媒體實(shí)驗(yàn)影像課件
- 游戲王統(tǒng)一規(guī)則
- 畢業(yè)論文-原油電脫水方法與機(jī)理的研究
評(píng)論
0/150
提交評(píng)論