




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第六六講講 屬性文法和屬性文法和語(yǔ)法制導(dǎo)翻譯語(yǔ)法制導(dǎo)翻譯u屬性文法屬性文法u基于屬性文法的處理基于屬性文法的處理u屬性的計(jì)算屬性的計(jì)算uS S屬性文法的自下而上計(jì)算屬性文法的自下而上計(jì)算uL L屬性文法的自上而下計(jì)算屬性文法的自上而下計(jì)算21. 1. 屬性文法屬性文法 屬性文法是在上下文無(wú)關(guān)文法的基礎(chǔ)上為每個(gè)文屬性文法是在上下文無(wú)關(guān)文法的基礎(chǔ)上為每個(gè)文法符號(hào)(終結(jié)符或非終結(jié)符)配備若干個(gè)相關(guān)的法符號(hào)(終結(jié)符或非終結(jié)符)配備若干個(gè)相關(guān)的“值值”(稱為(稱為屬性屬性)。這些屬性代表與文法符號(hào)相)。這些屬性代表與文法符號(hào)相關(guān)的信息,例如它的類型、值、代碼序列關(guān)的信息,例如它的類型、值、代碼序列
2、、符號(hào)表、符號(hào)表內(nèi)容等等。屬性和變量一樣,可以進(jìn)行計(jì)算和傳遞。內(nèi)容等等。屬性和變量一樣,可以進(jìn)行計(jì)算和傳遞。 屬性一般分為兩類:屬性一般分為兩類:綜合屬性:綜合屬性:用于用于“自下而上自下而上”傳遞信息,傳遞信息,繼承屬性:繼承屬性:用于用于“自上而下自上而下”傳遞信息。傳遞信息。 屬性加工的過(guò)程即是語(yǔ)義處理的過(guò)程,對(duì)于文屬性加工的過(guò)程即是語(yǔ)義處理的過(guò)程,對(duì)于文法的每一個(gè)產(chǎn)生式都配備了一組屬性的計(jì)算規(guī)則,法的每一個(gè)產(chǎn)生式都配備了一組屬性的計(jì)算規(guī)則,稱為語(yǔ)義規(guī)則。稱為語(yǔ)義規(guī)則。3屬性的類型 綜合屬性綜合屬性: 在語(yǔ)法樹中,一個(gè)結(jié)點(diǎn)的綜合屬性的值由其子在語(yǔ)法樹中,一個(gè)結(jié)點(diǎn)的綜合屬性的值由其子結(jié)點(diǎn)的
3、屬性值確定。通常使用結(jié)點(diǎn)的屬性值確定。通常使用自底向上自底向上的方法在每的方法在每一個(gè)結(jié)點(diǎn)處使用語(yǔ)義規(guī)則計(jì)算綜合屬性的值。僅僅一個(gè)結(jié)點(diǎn)處使用語(yǔ)義規(guī)則計(jì)算綜合屬性的值。僅僅使用綜合屬性的屬性文法稱使用綜合屬性的屬性文法稱S-S-屬性文法。屬性文法。 繼承屬性繼承屬性: 在語(yǔ)法樹中,一個(gè)結(jié)點(diǎn)的繼承屬性由此結(jié)點(diǎn)的在語(yǔ)法樹中,一個(gè)結(jié)點(diǎn)的繼承屬性由此結(jié)點(diǎn)的父結(jié)點(diǎn)父結(jié)點(diǎn)和和/ /或或兄弟結(jié)點(diǎn)的某些屬性確定??捎美^承兄弟結(jié)點(diǎn)的某些屬性確定??捎美^承屬性來(lái)表示程序語(yǔ)言結(jié)構(gòu)中的上下文依賴關(guān)系。屬性來(lái)表示程序語(yǔ)言結(jié)構(gòu)中的上下文依賴關(guān)系。4 注意:注意:(1 1)終結(jié)符只有綜合屬性,由詞法分析器提供;)終結(jié)符只有綜
4、合屬性,由詞法分析器提供;(2 2)非終結(jié)符既可以有綜合屬性也可以有繼承屬性。)非終結(jié)符既可以有綜合屬性也可以有繼承屬性。文法開始符號(hào)的所有繼承屬性作為屬性計(jì)算前的初文法開始符號(hào)的所有繼承屬性作為屬性計(jì)算前的初始值。始值。出現(xiàn)在產(chǎn)生式右邊的繼承屬性和出現(xiàn)在產(chǎn)生式出現(xiàn)在產(chǎn)生式右邊的繼承屬性和出現(xiàn)在產(chǎn)生式左邊的綜合屬性都必須提供一個(gè)計(jì)算規(guī)則。一左邊的綜合屬性都必須提供一個(gè)計(jì)算規(guī)則。一般地,屬性計(jì)算規(guī)則中只能使用相應(yīng)產(chǎn)生式的般地,屬性計(jì)算規(guī)則中只能使用相應(yīng)產(chǎn)生式的文法符號(hào)的屬性,這有利于產(chǎn)生式范圍內(nèi)文法符號(hào)的屬性,這有利于產(chǎn)生式范圍內(nèi)“封封裝裝”屬性的依賴性。屬性的依賴性。出現(xiàn)在產(chǎn)生式左邊的繼承屬性
5、和出現(xiàn)在產(chǎn)生式出現(xiàn)在產(chǎn)生式左邊的繼承屬性和出現(xiàn)在產(chǎn)生式右邊的綜合屬性不由所給的產(chǎn)生式的屬性計(jì)算右邊的綜合屬性不由所給的產(chǎn)生式的屬性計(jì)算規(guī)則進(jìn)行計(jì)算,它們由其它產(chǎn)生式的屬性規(guī)則規(guī)則進(jìn)行計(jì)算,它們由其它產(chǎn)生式的屬性規(guī)則計(jì)算或由屬性計(jì)算器的參數(shù)提供。計(jì)算或由屬性計(jì)算器的參數(shù)提供。5 在一個(gè)屬性文法中,對(duì)應(yīng)于每個(gè)產(chǎn)生式在一個(gè)屬性文法中,對(duì)應(yīng)于每個(gè)產(chǎn)生式A A都有一套與之相關(guān)聯(lián)的都有一套與之相關(guān)聯(lián)的語(yǔ)義規(guī)則語(yǔ)義規(guī)則,每條語(yǔ)義規(guī),每條語(yǔ)義規(guī)則的形式為:則的形式為: b:=f(c b:=f(c1 1,c,c2 2,c,ck k) ) 其中其中f f是一個(gè)函數(shù),并是一個(gè)函數(shù),并且滿足下面兩種情況之一:且滿足下
6、面兩種情況之一: (1 1)b b是是A A的一個(gè)綜合屬性并且的一個(gè)綜合屬性并且c c1 1,c,c2 2,c,ck k是是產(chǎn)生式右邊文法符號(hào)的屬性;產(chǎn)生式右邊文法符號(hào)的屬性; (2 2)b b是產(chǎn)生式右邊某個(gè)文法符號(hào)的一個(gè)繼是產(chǎn)生式右邊某個(gè)文法符號(hào)的一個(gè)繼承屬性并且承屬性并且c c1 1,c,c2 2,c,ck k是是A A或產(chǎn)生式右邊任何文或產(chǎn)生式右邊任何文法符號(hào)的屬性。法符號(hào)的屬性。 對(duì)這兩種情況都稱為屬性對(duì)這兩種情況都稱為屬性b b依賴于依賴于屬性屬性c c1 1,c,c2 2, , , c ck k。6語(yǔ)義規(guī)則語(yǔ)義規(guī)則 描述屬性計(jì)算、靜態(tài)語(yǔ)義檢查、符號(hào)表描述屬性計(jì)算、靜態(tài)語(yǔ)義檢查、符
7、號(hào)表操作、代碼生成等。語(yǔ)義規(guī)則可能產(chǎn)生操作、代碼生成等。語(yǔ)義規(guī)則可能產(chǎn)生副作副作用用(如產(chǎn)生代碼),也可能不是變?cè)膰?yán)格(如產(chǎn)生代碼),也可能不是變?cè)膰?yán)格函數(shù)(即函數(shù)中還有其它沒(méi)有列出的自變量函數(shù)(即函數(shù)中還有其它沒(méi)有列出的自變量如變量地址等),比如說(shuō)某個(gè)規(guī)則可能給出如變量地址等),比如說(shuō)某個(gè)規(guī)則可能給出可用的下一個(gè)數(shù)據(jù)單元的地址。這樣的語(yǔ)義可用的下一個(gè)數(shù)據(jù)單元的地址。這樣的語(yǔ)義規(guī)則通常寫成過(guò)程調(diào)用或過(guò)程段。規(guī)則通常寫成過(guò)程調(diào)用或過(guò)程段。7 下表是一個(gè)臺(tái)式計(jì)算器程序的屬性文法。該計(jì)算器讀入下表是一個(gè)臺(tái)式計(jì)算器程序的屬性文法。該計(jì)算器讀入一個(gè)算術(shù)表達(dá)式,計(jì)算并打印它的值,每個(gè)輸入行以一個(gè)算術(shù)表
8、達(dá)式,計(jì)算并打印它的值,每個(gè)輸入行以n n作為結(jié)作為結(jié)束。束。 在這些語(yǔ)義規(guī)則中,一個(gè)整數(shù)綜合屬性在這些語(yǔ)義規(guī)則中,一個(gè)整數(shù)綜合屬性valval把每個(gè)非終結(jié)把每個(gè)非終結(jié)符符E,T,FE,T,F聯(lián)系起來(lái)。記號(hào)聯(lián)系起來(lái)。記號(hào)digitdigit具有綜合屬性具有綜合屬性lexvallexval,其值由,其值由詞法分析器提供。詞法分析器提供。8LnE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=5digit.lexval=4F.val=3digit.lexval=5digit.lexval=3+*句子句子3 3* *5+45+4n n的帶注釋的語(yǔ)法
9、樹的帶注釋的語(yǔ)法樹這是個(gè)帶綜合屬性文法的例子,下面再來(lái)看一這是個(gè)帶綜合屬性文法的例子,下面再來(lái)看一個(gè)繼承屬性的例子。個(gè)繼承屬性的例子。9變量聲明語(yǔ)句中,通過(guò)繼承屬性把類型信息傳變量聲明語(yǔ)句中,通過(guò)繼承屬性把類型信息傳遞給每個(gè)標(biāo)識(shí)符。遞給每個(gè)標(biāo)識(shí)符。問(wèn)題:給出句子問(wèn)題:給出句子real a,b,c 的帶注釋的語(yǔ)法樹的帶注釋的語(yǔ)法樹?10112. 2. 基于屬性文法的處理方法基于屬性文法的處理方法 對(duì)單詞符號(hào)串進(jìn)行語(yǔ)法分析,構(gòu)造語(yǔ)法分析樹,對(duì)單詞符號(hào)串進(jìn)行語(yǔ)法分析,構(gòu)造語(yǔ)法分析樹,然后根據(jù)需要遍歷語(yǔ)法樹,并在語(yǔ)法樹的各結(jié)點(diǎn)處然后根據(jù)需要遍歷語(yǔ)法樹,并在語(yǔ)法樹的各結(jié)點(diǎn)處按語(yǔ)義規(guī)則進(jìn)行計(jì)算。按語(yǔ)義規(guī)則
10、進(jìn)行計(jì)算。 輸入串輸入串語(yǔ)法樹語(yǔ)法樹依賴圖依賴圖按按次序計(jì)算語(yǔ)義規(guī)則次序計(jì)算語(yǔ)義規(guī)則 這種由源程序的語(yǔ)法結(jié)構(gòu)所驅(qū)動(dòng)的處理辦法就這種由源程序的語(yǔ)法結(jié)構(gòu)所驅(qū)動(dòng)的處理辦法就是是語(yǔ)法制導(dǎo)翻譯語(yǔ)法制導(dǎo)翻譯。 語(yǔ)義規(guī)則的計(jì)算可能語(yǔ)義規(guī)則的計(jì)算可能產(chǎn)生代碼產(chǎn)生代碼、在、在符號(hào)表符號(hào)表中存中存放信息、給出放信息、給出錯(cuò)誤信息錯(cuò)誤信息或執(zhí)行任何或執(zhí)行任何其它動(dòng)作其它動(dòng)作。對(duì)輸入串的翻譯對(duì)輸入串的翻譯=根據(jù)語(yǔ)義規(guī)則進(jìn)行計(jì)算得出結(jié)果根據(jù)語(yǔ)義規(guī)則進(jìn)行計(jì)算得出結(jié)果12依賴圖依賴圖 語(yǔ)法樹中結(jié)點(diǎn)屬性之間的相互依賴關(guān)系用語(yǔ)法樹中結(jié)點(diǎn)屬性之間的相互依賴關(guān)系用依賴圖依賴圖描述描述 為每一個(gè)包含過(guò)程調(diào)用的語(yǔ)義規(guī)則引入一為每一個(gè)包
11、含過(guò)程調(diào)用的語(yǔ)義規(guī)則引入一個(gè)個(gè)虛綜合屬性虛綜合屬性b b,這樣把每一個(gè)語(yǔ)義規(guī)則都寫,這樣把每一個(gè)語(yǔ)義規(guī)則都寫成成 b:= f(c b:= f(c1 1,c,c2 2, c, ck k) ) 的形式。的形式。 依賴圖是一個(gè)有向圖,為每一個(gè)屬性設(shè)置依賴圖是一個(gè)有向圖,為每一個(gè)屬性設(shè)置一個(gè)結(jié)點(diǎn):如果屬性一個(gè)結(jié)點(diǎn):如果屬性b b依賴屬性依賴屬性c c,則從屬性,則從屬性c c的結(jié)點(diǎn)有一條有向邊連到屬性的結(jié)點(diǎn)有一條有向邊連到屬性b b的結(jié)點(diǎn)。的結(jié)點(diǎn)。13依賴圖依賴圖的畫法的畫法 例:屬性例:屬性 A.a:=f( X.x, Y.y )A.a:=f( X.x, Y.y ) 對(duì)應(yīng)于產(chǎn)生式對(duì)應(yīng)于產(chǎn)生式 A AX
12、Y XY 的語(yǔ)義規(guī)則。的語(yǔ)義規(guī)則。 在依賴圖中有三個(gè)相關(guān)結(jié)點(diǎn):在依賴圖中有三個(gè)相關(guān)結(jié)點(diǎn): A.a,X.x,Y.yA.a,X.x,Y.y。 由于由于A.aA.a依賴于依賴于X.xX.x, Y.yY.y,所以,所以有兩條有向邊從有兩條有向邊從X.xX.x到到A.aA.a,從,從Y.yY.y連到連到A.a.A.a. 如果與產(chǎn)生式如果與產(chǎn)生式A AXYXY對(duì)應(yīng)的語(yǔ)義規(guī)對(duì)應(yīng)的語(yǔ)義規(guī)則還有:則還有: X.i:=g(A.a,Y.y)X.i:=g(A.a,Y.y) 圖中再增加兩條有向邊:從圖中再增加兩條有向邊:從A.aA.a連到連到X.iX.i,從,從Y.yY.y連到連到X.i,X.i,因?yàn)橐驗(yàn)閄.iX.i依
13、賴于依賴于A.aA.a和和Y.y.Y.y.14例依賴圖當(dāng)下面的產(chǎn)生式應(yīng)用于語(yǔ)法樹時(shí),我們就像下當(dāng)下面的產(chǎn)生式應(yīng)用于語(yǔ)法樹時(shí),我們就像下圖所示的那樣把有向邊加到依賴圖中。圖所示的那樣把有向邊加到依賴圖中。 產(chǎn)生式產(chǎn)生式 語(yǔ)義規(guī)則語(yǔ)義規(guī)則 EE1+E2 E.val:=E1.val+E2.val15所以有兩條向所以有兩條向下的邊分別進(jìn)入結(jié)點(diǎn)下的邊分別進(jìn)入結(jié)點(diǎn)7 7 和和9 9。每一個(gè)與每一個(gè)與L L產(chǎn)生式有關(guān)的語(yǔ)義規(guī)則產(chǎn)生式有關(guān)的語(yǔ)義規(guī)則addtype(id.entry,L.in)addtype(id.entry,L.in)都都產(chǎn)生一個(gè)虛屬性,結(jié)點(diǎn)產(chǎn)生一個(gè)虛屬性,結(jié)點(diǎn)6 6、8 8和和1010都是為
14、這些虛屬性構(gòu)造的。都是為這些虛屬性構(gòu)造的。16良定義文法和屬性的計(jì)算次序良定義文法和屬性的計(jì)算次序 定義:屬性之間定義:屬性之間不存在循環(huán)依賴關(guān)系不存在循環(huán)依賴關(guān)系的屬性文法。的屬性文法。 一個(gè)有向非循環(huán)圖的一個(gè)有向非循環(huán)圖的拓?fù)湫蛲負(fù)湫蚴菆D中結(jié)點(diǎn)的任何順是圖中結(jié)點(diǎn)的任何順序序m1,m2, mk,使得邊必須是從序列中前面的結(jié)點(diǎn)使得邊必須是從序列中前面的結(jié)點(diǎn)指向后面的結(jié)點(diǎn)。也就是說(shuō),如果指向后面的結(jié)點(diǎn)。也就是說(shuō),如果mimj是是mi到到mj的一條邊,那么在序列中的一條邊,那么在序列中mi必須出現(xiàn)在必須出現(xiàn)在mj之前。之前。 一個(gè)依賴圖的任何拓?fù)渑判蚨冀o出一個(gè)語(yǔ)法樹中一個(gè)依賴圖的任何拓?fù)渑判蚨冀o出
15、一個(gè)語(yǔ)法樹中結(jié)點(diǎn)的語(yǔ)義規(guī)則計(jì)算的有效順序。結(jié)點(diǎn)的語(yǔ)義規(guī)則計(jì)算的有效順序。 屬性文法說(shuō)明的翻譯是很精確的:基礎(chǔ)文法用于屬性文法說(shuō)明的翻譯是很精確的:基礎(chǔ)文法用于構(gòu)造輸入符號(hào)串的語(yǔ)法分析樹,在此基礎(chǔ)之上可以構(gòu)造輸入符號(hào)串的語(yǔ)法分析樹,在此基礎(chǔ)之上可以建立依賴圖。按照?qǐng)D的某一種拓?fù)渑判?,就可以根建立依賴圖。按照?qǐng)D的某一種拓?fù)渑判?,就可以根?jù)語(yǔ)義規(guī)則進(jìn)行翻譯。據(jù)語(yǔ)義規(guī)則進(jìn)行翻譯。17樹遍歷的屬性計(jì)算方法樹遍歷的屬性計(jì)算方法 以某種次序遍歷語(yǔ)法樹,直至計(jì)算出所有的以某種次序遍歷語(yǔ)法樹,直至計(jì)算出所有的屬性。最常用的遍歷方法是屬性。最常用的遍歷方法是深度優(yōu)先,從左深度優(yōu)先,從左到右到右的遍歷方法。這種方法
16、最簡(jiǎn)單,適應(yīng)面的遍歷方法。這種方法最簡(jiǎn)單,適應(yīng)面最廣。(算法略)最廣。(算法略) 缺點(diǎn):缺點(diǎn):v必須在語(yǔ)法樹建立之后才能使用必須在語(yǔ)法樹建立之后才能使用v效率不高效率不高對(duì)每個(gè)非終結(jié)符號(hào):對(duì)每個(gè)非終結(jié)符號(hào):多次重復(fù)計(jì)算所有能夠計(jì)算的繼承屬性多次重復(fù)計(jì)算所有能夠計(jì)算的繼承屬性最后計(jì)算所有能夠計(jì)算的綜合屬性最后計(jì)算所有能夠計(jì)算的綜合屬性18一遍掃描的處理方法一遍掃描的處理方法 在語(yǔ)法分析的同時(shí)計(jì)算屬性值,因而無(wú)需構(gòu)造在語(yǔ)法分析的同時(shí)計(jì)算屬性值,因而無(wú)需構(gòu)造實(shí)際的語(yǔ)法樹。實(shí)際的語(yǔ)法樹。 語(yǔ)法制導(dǎo)翻譯法就是為文法中每個(gè)產(chǎn)生式配上語(yǔ)法制導(dǎo)翻譯法就是為文法中每個(gè)產(chǎn)生式配上一組語(yǔ)義規(guī)則,并且,在一組語(yǔ)義規(guī)則
17、,并且,在語(yǔ)法分析的同時(shí)語(yǔ)法分析的同時(shí)執(zhí)行這執(zhí)行這些語(yǔ)義規(guī)則。些語(yǔ)義規(guī)則。計(jì)算語(yǔ)義規(guī)則,完成有關(guān)語(yǔ)義分析和代碼生成動(dòng)作計(jì)算語(yǔ)義規(guī)則,完成有關(guān)語(yǔ)義分析和代碼生成動(dòng)作的時(shí)機(jī):的時(shí)機(jī):自上而下分析中一個(gè)產(chǎn)生式匹配輸入串成功時(shí);自上而下分析中一個(gè)產(chǎn)生式匹配輸入串成功時(shí);自下而上分析中一個(gè)產(chǎn)生式被用于進(jìn)行歸約時(shí)。自下而上分析中一個(gè)產(chǎn)生式被用于進(jìn)行歸約時(shí)。19抽象語(yǔ)法樹抽象語(yǔ)法樹v 在語(yǔ)法分析期間完成翻譯工作可大幅提高編譯的時(shí)在語(yǔ)法分析期間完成翻譯工作可大幅提高編譯的時(shí)空效率,但也存在一些問(wèn)題:空效率,但也存在一些問(wèn)題:適合于語(yǔ)法分析的文法可能并不反映語(yǔ)言成分的自然層適合于語(yǔ)法分析的文法可能并不反映語(yǔ)言成
18、分的自然層次結(jié)構(gòu);次結(jié)構(gòu);特定的語(yǔ)法分析方法也可能限制了語(yǔ)法分析樹的節(jié)點(diǎn)考特定的語(yǔ)法分析方法也可能限制了語(yǔ)法分析樹的節(jié)點(diǎn)考察順序察順序v 因此,現(xiàn)代編譯器通用的做法是:通過(guò)語(yǔ)法分析因此,現(xiàn)代編譯器通用的做法是:通過(guò)語(yǔ)法分析構(gòu)造語(yǔ)法樹,再對(duì)語(yǔ)法樹進(jìn)行遍歷完成屬性的計(jì)算。構(gòu)造語(yǔ)法樹,再對(duì)語(yǔ)法樹進(jìn)行遍歷完成屬性的計(jì)算。也就是使用中間表示也就是使用中間表示(Intermediate (Intermediate Representation)Representation)把翻譯從語(yǔ)法分析中分離出來(lái)。把翻譯從語(yǔ)法分析中分離出來(lái)。v這樣做可以使編譯器更好地模塊化,也方便了移植這樣做可以使編譯器更好地模塊化,
19、也方便了移植和優(yōu)化。和優(yōu)化。20 為每個(gè)運(yùn)算分量或?yàn)槊總€(gè)運(yùn)算分量或運(yùn)算符號(hào)都建立一個(gè)運(yùn)算符號(hào)都建立一個(gè)結(jié)點(diǎn)來(lái)為子表達(dá)式建結(jié)點(diǎn)來(lái)為子表達(dá)式建立子樹。運(yùn)算符號(hào)結(jié)立子樹。運(yùn)算符號(hào)結(jié)點(diǎn)的各子結(jié)點(diǎn)分別是點(diǎn)的各子結(jié)點(diǎn)分別是表示該運(yùn)算符號(hào)的各表示該運(yùn)算符號(hào)的各個(gè)運(yùn)算分量的子表達(dá)個(gè)運(yùn)算分量的子表達(dá)式組成的子樹的根。式組成的子樹的根。 抽象語(yǔ)法樹中的每一個(gè)結(jié)點(diǎn)可以抽象語(yǔ)法樹中的每一個(gè)結(jié)點(diǎn)可以由包含幾個(gè)域的記錄來(lái)實(shí)現(xiàn)。由包含幾個(gè)域的記錄來(lái)實(shí)現(xiàn)。 在在一個(gè)運(yùn)算符號(hào)對(duì)應(yīng)的結(jié)點(diǎn)中一個(gè)運(yùn)算符號(hào)對(duì)應(yīng)的結(jié)點(diǎn)中, ,一個(gè)一個(gè)域標(biāo)識(shí)運(yùn)算符號(hào)域標(biāo)識(shí)運(yùn)算符號(hào), ,其它域包含指向其它域包含指向運(yùn)算分量的結(jié)點(diǎn)的指針。運(yùn)算分量的結(jié)點(diǎn)的指針
20、。 通常,運(yùn)算符號(hào)叫做這個(gè)結(jié)點(diǎn)的通常,運(yùn)算符號(hào)叫做這個(gè)結(jié)點(diǎn)的標(biāo)號(hào)。進(jìn)行翻譯時(shí),抽象語(yǔ)法樹中標(biāo)號(hào)。進(jìn)行翻譯時(shí),抽象語(yǔ)法樹中的結(jié)點(diǎn)可能會(huì)用附加域來(lái)存放結(jié)點(diǎn)的結(jié)點(diǎn)可能會(huì)用附加域來(lái)存放結(jié)點(diǎn)的屬性值的屬性值( (或指向?qū)傩缘闹羔槪?。或指向?qū)傩缘闹羔槪?。表達(dá)式表達(dá)式3*5+4的抽象語(yǔ)法樹的抽象語(yǔ)法樹抽象語(yǔ)法樹抽象語(yǔ)法樹(AST)(AST):語(yǔ)法分析樹的壓縮形式。:語(yǔ)法分析樹的壓縮形式。葉子結(jié)點(diǎn):終結(jié)符的綜合屬性、文法開始符號(hào)的繼承屬性葉子結(jié)點(diǎn):終結(jié)符的綜合屬性、文法開始符號(hào)的繼承屬性以下以表達(dá)式為例,說(shuō)明如何構(gòu)造以下以表達(dá)式為例,說(shuō)明如何構(gòu)造ASTAST。21綜合屬性綜合屬性nptr表示函數(shù)調(diào)用返回的指針
21、。表示函數(shù)調(diào)用返回的指針。22a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口23a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口24a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.
22、nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口25a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口26a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+
23、F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口27a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口28a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向
24、符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口29a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口30a+5* *b的語(yǔ)法樹的構(gòu)造的語(yǔ)法樹的構(gòu)造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+ F.nptrF.nptridnumididnum 5 + +指向符號(hào)表中指向符號(hào)表中a的入口的入口指向符號(hào)表中指向符號(hào)表中b的入口的入口313.3. S
25、-屬性文法的自下而上計(jì)算S-屬性文法:只含有綜合屬性的屬性文法。屬性文法:只含有綜合屬性的屬性文法。 在自底向上的分析法如在自底向上的分析法如LR分析法中,我分析法中,我們使用一個(gè)棧來(lái)存放已經(jīng)分析過(guò)的子樹的們使用一個(gè)棧來(lái)存放已經(jīng)分析過(guò)的子樹的信息,現(xiàn)在可以在分析棧中使用一個(gè)附加信息,現(xiàn)在可以在分析棧中使用一個(gè)附加的域來(lái)存放綜合屬性值。的域來(lái)存放綜合屬性值。 如果一個(gè)屬性文法是如果一個(gè)屬性文法是S-屬性文法,那么屬性文法,那么在計(jì)算每個(gè)語(yǔ)義規(guī)則時(shí),分析棧中棧頂在計(jì)算每個(gè)語(yǔ)義規(guī)則時(shí),分析棧中棧頂處正好就是計(jì)算語(yǔ)義規(guī)則時(shí)需要用到的處正好就是計(jì)算語(yǔ)義規(guī)則時(shí)需要用到的其它屬性值。其它屬性值。32 假設(shè)圖
26、中的棧是由一對(duì)數(shù)組假設(shè)圖中的棧是由一對(duì)數(shù)組state和和val來(lái)實(shí)現(xiàn)的。每一個(gè)來(lái)實(shí)現(xiàn)的。每一個(gè)state元素都是元素都是一個(gè)指向一個(gè)指向LR(1)分析表的指針(或索引)。(注意,文法符號(hào)隱含在分析表的指針(或索引)。(注意,文法符號(hào)隱含在state中中而不需要存儲(chǔ)在棧中)。然而,如果像而不需要存儲(chǔ)在棧中)。然而,如果像前面前面LR分析時(shí)分析時(shí)的那樣把文法符號(hào)存入的那樣把文法符號(hào)存入棧中時(shí),那么當(dāng)?shù)跅V袝r(shí),那么當(dāng)?shù)趇個(gè)個(gè)state對(duì)應(yīng)的符號(hào)為對(duì)應(yīng)的符號(hào)為A時(shí),時(shí),vali中就存放語(yǔ)法樹中與結(jié)中就存放語(yǔ)法樹中與結(jié)點(diǎn)點(diǎn)A對(duì)應(yīng)的屬性值。對(duì)應(yīng)的屬性值。 設(shè)當(dāng)前棧頂由指針設(shè)當(dāng)前棧頂由指針top指示。我們假
27、設(shè)綜合屬性是剛好在每次歸約前計(jì)指示。我們假設(shè)綜合屬性是剛好在每次歸約前計(jì)算的。假設(shè)語(yǔ)義規(guī)則算的。假設(shè)語(yǔ)義規(guī)則A.a:=f(X.x,Y.y,Z.z)是對(duì)應(yīng)于產(chǎn)生式是對(duì)應(yīng)于產(chǎn)生式AXYZ的。在把的。在把XYZ歸約成歸約成A以前,屬性以前,屬性Z.z的值放在的值放在valtop中,中,Y.y的值放在的值放在valtop-1中,中,X.x的值放在的值放在valtop-2中。如果一個(gè)符號(hào)沒(méi)有綜合屬性,那么數(shù)組中。如果一個(gè)符號(hào)沒(méi)有綜合屬性,那么數(shù)組val中相應(yīng)中相應(yīng)的元素就不定義。歸約后,的元素就不定義。歸約后,top值減值減2,A的狀態(tài)存放在的狀態(tài)存放在statetop中(也就是中(也就是X的位置)綜合
28、屬性的位置)綜合屬性A.a的值存放在的值存放在valtop中。中。33邊分析邊翻譯的方式能否用于繼承屬性邊分析邊翻譯的方式能否用于繼承屬性?v屬性的計(jì)算次序一定受分析方法所限定的分析樹結(jié)屬性的計(jì)算次序一定受分析方法所限定的分析樹結(jié)點(diǎn)建立次序的限制點(diǎn)建立次序的限制v分析樹的結(jié)點(diǎn)是自左向右生成分析樹的結(jié)點(diǎn)是自左向右生成v如果屬性信息是自左向右流動(dòng),那么就有可能在分如果屬性信息是自左向右流動(dòng),那么就有可能在分析的同時(shí)完成屬性計(jì)算析的同時(shí)完成屬性計(jì)算344.4. L- L-屬性文法和自頂向下翻譯屬性文法和自頂向下翻譯L-屬性文法屬性文法:如果對(duì)于每個(gè)產(chǎn)生式:如果對(duì)于每個(gè)產(chǎn)生式AX1X2Xn的每個(gè)的每個(gè)
29、語(yǔ)義規(guī)則中,每個(gè)屬性或者是綜合屬性,或者是語(yǔ)義規(guī)則中,每個(gè)屬性或者是綜合屬性,或者是Xj(1=j=n)的一個(gè)繼承屬性且這個(gè)繼承屬性僅依賴的一個(gè)繼承屬性且這個(gè)繼承屬性僅依賴于:于: (1)產(chǎn)生式)產(chǎn)生式Xj的左邊符號(hào)的左邊符號(hào)X1,X2,Xj-1的屬性的屬性 (2)A的繼承屬性。的繼承屬性。L-屬性文法也就是屬性文法也就是“左屬性左屬性”文法,計(jì)算每一個(gè)繼承屬文法,計(jì)算每一個(gè)繼承屬性時(shí)不能引用右邊符號(hào)的屬性性時(shí)不能引用右邊符號(hào)的屬性(繼承屬性和綜合屬性繼承屬性和綜合屬性)。由此定義可知,由此定義可知,S屬性文法一定是屬性文法一定是L屬性文法。屬性文法。35 翻譯模式翻譯模式 屬性文法可以看成是關(guān)
30、于語(yǔ)言翻譯的高級(jí)規(guī)屬性文法可以看成是關(guān)于語(yǔ)言翻譯的高級(jí)規(guī)范說(shuō)明,其中隱去實(shí)現(xiàn)細(xì)節(jié),使用戶從明確說(shuō)明翻范說(shuō)明,其中隱去實(shí)現(xiàn)細(xì)節(jié),使用戶從明確說(shuō)明翻譯順序的工作中解脫出來(lái)。下面我們討論一種適合譯順序的工作中解脫出來(lái)。下面我們討論一種適合語(yǔ)法制導(dǎo)翻譯的另一種描述形式,稱為語(yǔ)法制導(dǎo)翻譯的另一種描述形式,稱為翻譯模式翻譯模式。翻譯模式給出了使用語(yǔ)義規(guī)則進(jìn)行計(jì)算的次序,這翻譯模式給出了使用語(yǔ)義規(guī)則進(jìn)行計(jì)算的次序,這樣就可以把某些實(shí)現(xiàn)細(xì)節(jié)表示出來(lái)。在翻譯模式中,樣就可以把某些實(shí)現(xiàn)細(xì)節(jié)表示出來(lái)。在翻譯模式中,和文法符號(hào)相關(guān)的屬性和語(yǔ)義規(guī)則(這里我們也稱和文法符號(hào)相關(guān)的屬性和語(yǔ)義規(guī)則(這里我們也稱語(yǔ)義動(dòng)作),用
31、花括號(hào)語(yǔ)義動(dòng)作),用花括號(hào) 括起來(lái),插入到產(chǎn)生式右括起來(lái),插入到產(chǎn)生式右部的合適位置上。這樣翻譯模式給出了使用語(yǔ)義規(guī)部的合適位置上。這樣翻譯模式給出了使用語(yǔ)義規(guī)則進(jìn)行計(jì)算的順序。則進(jìn)行計(jì)算的順序。36對(duì)繼承屬性出現(xiàn)位置的限制對(duì)繼承屬性出現(xiàn)位置的限制為了計(jì)算出繼承屬性,為了計(jì)算出繼承屬性,翻譯模式翻譯模式必須滿足三個(gè)條件:必須滿足三個(gè)條件: (1)產(chǎn)生式右邊的符號(hào)的繼承屬性必須在這個(gè)符)產(chǎn)生式右邊的符號(hào)的繼承屬性必須在這個(gè)符號(hào)以前的動(dòng)作中計(jì)算出來(lái)。號(hào)以前的動(dòng)作中計(jì)算出來(lái)。 (2)一個(gè)動(dòng)作不能引用這個(gè)動(dòng)作右邊符號(hào)的綜合)一個(gè)動(dòng)作不能引用這個(gè)動(dòng)作右邊符號(hào)的綜合屬性。屬性。 (3)產(chǎn)生式左邊非終結(jié)符的
32、綜合屬性只有在它所)產(chǎn)生式左邊非終結(jié)符的綜合屬性只有在它所引用的所有屬性都計(jì)算出來(lái)后才能計(jì)算。計(jì)算這種引用的所有屬性都計(jì)算出來(lái)后才能計(jì)算。計(jì)算這種屬性的動(dòng)作通??煞旁诋a(chǎn)生式右端的末尾。屬性的動(dòng)作通??煞旁诋a(chǎn)生式右端的末尾。37不滿足條件的例子SA1A2 A1.in := 1; A2.in := 2;A a print(A.in) 應(yīng)該改為:S A1.in := 1; A1 A2.in := 2; A2 A a print(A.in) 通常寫成:S A1.in := 1; A1 A2.in := 2; A2 A a print(A.in) 38自頂向下翻譯自頂向下翻譯 在第四在第四講講我們知道,
33、為了構(gòu)造不帶回溯我們知道,為了構(gòu)造不帶回溯的自頂向下語(yǔ)法分析,必須消除文法中的左的自頂向下語(yǔ)法分析,必須消除文法中的左遞歸。現(xiàn)在我們把前面消除左遞歸的方法加遞歸?,F(xiàn)在我們把前面消除左遞歸的方法加以擴(kuò)充以擴(kuò)充,當(dāng)消除一個(gè)翻譯模式的基本語(yǔ)法的左當(dāng)消除一個(gè)翻譯模式的基本語(yǔ)法的左遞歸時(shí)同時(shí)考慮屬性。這種方法適合帶綜合遞歸時(shí)同時(shí)考慮屬性。這種方法適合帶綜合屬性的翻譯模式。這樣許多文法可以使用自屬性的翻譯模式。這樣許多文法可以使用自頂向下分析來(lái)實(shí)現(xiàn)。頂向下分析來(lái)實(shí)現(xiàn)。39消除左遞歸消除左遞歸推廣轉(zhuǎn)換左遞規(guī)翻譯模式的方法,以便進(jìn)行自頂向下分析:推廣轉(zhuǎn)換左遞規(guī)翻譯模式的方法,以便進(jìn)行自頂向下分析: 假設(shè)我們有
34、下面的翻譯模式:假設(shè)我們有下面的翻譯模式: AA1Y A.a:=g(A1.a,Y.y) AX A.a:=f(X.x) 其每個(gè)文法符號(hào)都有一個(gè)綜合屬性,用小寫字母表示,其每個(gè)文法符號(hào)都有一個(gè)綜合屬性,用小寫字母表示,g和和f是任意函數(shù)。是任意函數(shù)。利用第四章消除左遞歸的算法,可將其轉(zhuǎn)換成下面文法:利用第四章消除左遞歸的算法,可將其轉(zhuǎn)換成下面文法: AXR R YR|40 翻譯模式變?yōu)椋悍g模式變?yōu)椋?AX R.i:=f(X.x) AX R.i:=f(X.x) R A.a:=R.s R A.a:=R.s RY R RY R1 1.i:=g(R.i,Y.y) .i:=g(R.i,Y.y) R R1
35、1 R.s:= R R.s:= R1 1.s .s R R.s:= R.i R R.s:= R.i 經(jīng)過(guò)轉(zhuǎn)換的翻譯模式,使用了經(jīng)過(guò)轉(zhuǎn)換的翻譯模式,使用了R R的繼承屬性的繼承屬性i i和綜合和綜合屬性屬性s.s. 考慮產(chǎn)生算術(shù)表達(dá)式的文法,它的翻譯模式如何考慮產(chǎn)生算術(shù)表達(dá)式的文法,它的翻譯模式如何? ?考慮語(yǔ)義動(dòng)作考慮語(yǔ)義動(dòng)作41 求值翻譯模式:求值翻譯模式: 使用屬性使用屬性valval來(lái)保存計(jì)算結(jié)果來(lái)保存計(jì)算結(jié)果 ET R.i:=T.val ET R.i:=T.val R E.val:=R.s R E.val:=R.s R+ R+ T R T R1 1.i:=R.i+T.val.i:=R.
36、i+T.val R R1 1 R.s:= R R.s:= R1 1.s .s R R.s:= R.i R R.s:= R.i T( T( E E ) T.val:= E.val ) T.val:= E.val Tnum T.val:= num.val Tnum T.val:= num.val42 構(gòu)造語(yǔ)法樹的翻譯模式:構(gòu)造語(yǔ)法樹的翻譯模式: 使用屬性使用屬性p p來(lái)保存語(yǔ)法子樹的根結(jié)點(diǎn)指針來(lái)保存語(yǔ)法子樹的根結(jié)點(diǎn)指針 ET R.i:=T.p ET R.i:=T.p R E.p:=R.s R E.p:=R.s R+ R+ T T RR1 1.i:=mknod(+,R.i,T.p).i:=mknod
37、(+,R.i,T.p) R R1 1 R.s:= R R.s:= R1 1.s .s R R.s:= R.i R R.s:= R.i T( T( E E ) T.p:= E.p ) T.p:= E.p Tnum T.p:=mkleaf(num,num.val) Tnum T.p:=mkleaf(num,num.val)43遞歸下降翻譯器的構(gòu)造遞歸下降翻譯器的構(gòu)造v思想:對(duì)遞歸下降的語(yǔ)法分析器進(jìn)行擴(kuò)展(在適當(dāng)?shù)奈恢眉尤胝Z(yǔ)義子程序),使之能夠?qū)崿F(xiàn)翻譯模式。v方法:為每個(gè)非終結(jié)符A構(gòu)造一個(gè)函數(shù),A的繼承屬性對(duì)應(yīng)該函數(shù)的形式參數(shù),其返回值為A的綜合屬性。函數(shù)體內(nèi),對(duì)出現(xiàn)在A的產(chǎn)生式右部的每個(gè)文法符號(hào)的
38、每個(gè)屬性都設(shè)置一個(gè)局部變量。控制流程依然由遞歸下降分析方法確定。44在每個(gè)產(chǎn)生式對(duì)應(yīng)的程序代碼中,按照從左到右的次序,對(duì)于終結(jié)符、非終結(jié)符及其語(yǔ)義動(dòng)作分別作以下工作:v對(duì)于帶有綜合屬性x的終結(jié)符X,把x的值存入為X.x設(shè)置的變量中。然后產(chǎn)生一個(gè)匹配X的調(diào)用,并繼續(xù)輸入。v對(duì)于每個(gè)非終結(jié)符B,產(chǎn)生一個(gè)右部帶有函數(shù)調(diào)用的賦值語(yǔ)句 c=B(b1,b2,.,bn),其中b1,b2,.,bn是為B的繼承屬性設(shè)置的變量, c是為B的綜合屬性設(shè)置的變量。v對(duì)于語(yǔ)義動(dòng)作,把動(dòng)作的代碼抄進(jìn)語(yǔ)法分析器中,并把對(duì)屬性的引用改為對(duì)相應(yīng)變量的引用。思考:實(shí)現(xiàn)上述算術(shù)表達(dá)式文法的翻譯模式,產(chǎn)生語(yǔ)法樹。45 預(yù)測(cè)翻譯器的設(shè)
39、計(jì):示例預(yù)測(cè)翻譯器的設(shè)計(jì):示例把預(yù)測(cè)分析器的構(gòu)造方法推廣到翻譯方案的實(shí)現(xiàn)把預(yù)測(cè)分析器的構(gòu)造方法推廣到翻譯方案的實(shí)現(xiàn)產(chǎn)生式產(chǎn)生式R +TR | 的分析過(guò)程的分析過(guò)程procedure R;beginif lookahead = + then beginmatch ( + ); T ; Rendelse begin / 什么也不做什么也不做 /endend 46function R (i : syntax_tree_node ) : syntax_tree_node;var nptr , i1, s1, s : syntax_tree_node; addoplexeme : char;begin
40、if lookahead = + then begin / 產(chǎn)生式產(chǎn)生式 R +T R /addoplexeme = lexval;match( + );nptr = T; i1 = mknode(addoplexme, i , nptr) ; s1 = R (i1 ); s = s1endelse s = i; / 產(chǎn)生式產(chǎn)生式 R /return send;R : i, sT : nptr+ : addoplexeme47 5.5. 自下而上計(jì)算繼承屬性自下而上計(jì)算繼承屬性v自下而上地計(jì)算L-屬性??梢曰谒蠰L(1)文法和許多LR(1)的L-屬性文法。v從翻譯模式中去掉嵌入在產(chǎn)生式中間
41、的動(dòng)作v分析棧中的繼承屬性 復(fù)寫規(guī)則:能夠預(yù)知屬性值在棧中的存放位置v模擬繼承屬性的計(jì)算 不能預(yù)知屬性值在棧中的存放位置時(shí),通過(guò)模擬非終結(jié)符、修改翻譯模式歸結(jié)為2中的情形v用綜合屬性代替繼承屬性 改變基礎(chǔ)文法以避免繼承屬性 詳見(jiàn)參考書詳見(jiàn)參考書48習(xí)題一v下列文法由開始符號(hào)S產(chǎn)生一個(gè)二進(jìn)制數(shù),令綜合屬性val給出該數(shù)的值:SL . L|LL LB|BB 0|1 試設(shè)計(jì)求S.val的屬性文法。其中,已知B的綜合屬性c,給出由B產(chǎn)生的二進(jìn)位的結(jié)果值。49方法1:使用L.val、L.len屬性SL S.val = L.val SL1.L2 S.val = L1.val + L2.val/2L2.le
42、nL BL.val = B.c, L.len = 1L L1BL.val = 2*L1.val + B.c, L.len = L1.len + 1B 0B.c = 0B 1B.c = 150方法2:使用L.lval、L.w屬性SL S.val = L.lval SL1.L2 S.val = L1.lval + L2.lval / L2.wL BL.lval = B.c, L.w = 2L L1BL.lval = 2*L1.lval + B.c, L.w = 2 * L1.w B 0B.c = 0B 1B.c = 151為下面文法寫一個(gè)語(yǔ)法制導(dǎo)的定義,用為下面文法寫一個(gè)語(yǔ)法制導(dǎo)的定義,用S S的
43、綜合屬性的綜合屬性valval給出下面文法中給出下面文法中S S產(chǎn)生的二進(jìn)制數(shù)的值。例如,輸入產(chǎn)生的二進(jìn)制數(shù)的值。例如,輸入101.101101.101時(shí),時(shí),S. S. valval = 5.625 = 5.625。不得修改文法,但屬性不得修改文法,但屬性使用沒(méi)有限制使用沒(méi)有限制S L . R | LL L B | BR B R | BB 0 | 1S.LLBLBBRRBRBB習(xí)題二52S L . RS. val = L. val + R. valS LS. val = L. valL L1 BL. val = L1. val 2 + B. valL BL. val = B. valR B
44、R1R. val = R1. val / 2 + B. val / 2R BR. val = B. val / 2B 0B. val = 0B 1B. val = 153給出把中綴表達(dá)式翻譯成沒(méi)有冗余括號(hào)的中綴表給出把中綴表達(dá)式翻譯成沒(méi)有冗余括號(hào)的中綴表達(dá)式的語(yǔ)法制導(dǎo)定義。例如達(dá)式的語(yǔ)法制導(dǎo)定義。例如, ,因?yàn)橐驗(yàn)?和和 是左結(jié)合是左結(jié)合, ,(a (b + c ) (d )可以重寫成可以重寫成a (b + c ) dv先把表達(dá)式的括號(hào)都去掉,然后在必要的地方先把表達(dá)式的括號(hào)都去掉,然后在必要的地方再加括號(hào)再加括號(hào)v去掉表達(dá)式中的冗余括號(hào),保留必要的括號(hào)去掉表達(dá)式中的冗余括號(hào),保留必要的括號(hào) 習(xí)題三54 第一種方法第一種方法S E print ( E. code )E E1 + T if T. op = plus thenE.code =E1.code|“+”|“(”|T.code|“)”elseE
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)軟件應(yīng)用課件考核試卷
- 橡膠在建筑領(lǐng)域的使用考核試卷
- 鋅錳電池失效分析與預(yù)防措施考核試卷
- 零售門店顧客引流策略考核試卷
- 傳感器在智能交通信號(hào)系統(tǒng)中的應(yīng)用考核試卷
- 畢業(yè)設(shè)計(jì)動(dòng)員大會(huì)
- 呼吸機(jī)結(jié)構(gòu)與原理
- HDAC6-IN-53-生命科學(xué)試劑-MCE
- 暴雨橙色預(yù)警防御指南(27P)
- 2025年下半年鋼鐵行業(yè)成本壓力緩解行業(yè)格局改善
- 醫(yī)美轉(zhuǎn)正工作總結(jié)
- 2025年太陽(yáng)能空調(diào)系統(tǒng)合同
- 醫(yī)院護(hù)理人文關(guān)懷實(shí)踐規(guī)范專家共識(shí)課件
- 課題申報(bào)參考:城市綠色紳士化的格局、機(jī)制與效應(yīng)研究-以西安市為例
- 汝州職業(yè)技術(shù)學(xué)院《酒店應(yīng)用英語(yǔ)高級(jí)》2023-2024學(xué)年第一學(xué)期期末試卷
- 【MOOC】《基礎(chǔ)工業(yè)工程》(東北大學(xué))中國(guó)大學(xué)慕課答案
- 農(nóng)村水利申請(qǐng)書范文
- 紹興市部分市屬國(guó)企招聘筆試沖刺題2025
- (自考)經(jīng)濟(jì)學(xué)原理中級(jí)(政經(jīng))課件 第五章 資本主義經(jīng)濟(jì)危機(jī)與歷史發(fā)展
- 英倫歷史文化拾遺知到智慧樹章節(jié)測(cè)試課后答案2024年秋哈爾濱師范大學(xué)
- 會(huì)計(jì)案例分析-終結(jié)性考核-國(guó)開(SC)-參考資料
評(píng)論
0/150
提交評(píng)論