版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
語(yǔ)法制導(dǎo)翻譯和中間代碼生成演示文稿第一頁(yè),共五十頁(yè)。優(yōu)選語(yǔ)法制導(dǎo)翻譯和中間代碼生成第二頁(yè),共五十頁(yè)。目標(biāo)程序源程序詞法分析語(yǔ)法分析語(yǔ)義分析中間代碼生成代碼優(yōu)化目標(biāo)代碼生成表格管理出錯(cuò)處理第三頁(yè),共五十頁(yè)。語(yǔ)義分析基礎(chǔ)語(yǔ)義分析的內(nèi)容主要是類型相容檢查,有以下幾種:各種條件表達(dá)式的類型是不是boolean型?運(yùn)算符的分量類型是否相容?賦值語(yǔ)句的左右部的類型是否相容?形參和實(shí)參的類型是否相容?下標(biāo)表達(dá)式的類型是否為所允許的類型?函數(shù)說(shuō)明中的函數(shù)類型和返回值的類型是否一致?第四頁(yè),共五十頁(yè)。語(yǔ)義分析基礎(chǔ)-語(yǔ)義分析的內(nèi)容(續(xù))其它語(yǔ)義檢查:V[E]中的V是不是變量,而且是數(shù)組類型?V.i中的V是不是變量,而且是記錄類型?i是不是該記錄的域名?x+f(…)中的f是不是函數(shù)名?形參個(gè)數(shù)和實(shí)參個(gè)數(shù)是否一致?每個(gè)使用性標(biāo)識(shí)符是否都有聲明?有無(wú)標(biāo)識(shí)符的重復(fù)聲明?第五頁(yè),共五十頁(yè)。語(yǔ)義分析基礎(chǔ)在語(yǔ)義分析同時(shí)產(chǎn)生中間代碼,在這種模式下,語(yǔ)義分析的主要功能如下:語(yǔ)義審查在掃描聲明部分時(shí)構(gòu)造標(biāo)識(shí)符的符號(hào)表在掃描語(yǔ)句部分時(shí)產(chǎn)生中間代碼中間代碼:獨(dú)立于機(jī)器,復(fù)雜性介于源語(yǔ)言和機(jī)器語(yǔ)言之間,十分接近目標(biāo)機(jī)器指令的一種表示形式。對(duì)于中間代碼的產(chǎn)生,是很困難的,因?yàn)檎Z(yǔ)義形式化比語(yǔ)法形式化難得多。目前普遍采用的語(yǔ)義分析方法——語(yǔ)法制導(dǎo)翻譯方法 使用屬性文法為工具來(lái)說(shuō)明程序設(shè)計(jì)語(yǔ)言的語(yǔ)義。第六頁(yè),共五十頁(yè)。6.1屬性文法(AttributeGrammar)屬性 對(duì)文法的每一個(gè)符號(hào),引進(jìn)一些屬性,這些屬性代表與文法符號(hào)相關(guān)的信息,如類型、值、存儲(chǔ)位置等。語(yǔ)義規(guī)則 為文法的每一個(gè)產(chǎn)生式配備的計(jì)算屬性的計(jì)算規(guī)則,稱為語(yǔ)義規(guī)則。屬性文法是帶屬性的一種文法 它的主要思想:首先對(duì)于每個(gè)文法符號(hào)引進(jìn)相關(guān)的屬性符號(hào);其次對(duì)于每個(gè)產(chǎn)生式寫(xiě)出計(jì)算屬性值的語(yǔ)義規(guī)則第七頁(yè),共五十頁(yè)。6.1屬性文法(續(xù))屬性文法的形式定義 一個(gè)屬性文法是一個(gè)三元組,A=(G,V,F)G是一個(gè)上下文無(wú)關(guān)文法;V是屬性的有窮集;F是關(guān)于屬性的斷言的有窮集。說(shuō)明: 每個(gè)屬性與文法符號(hào)相聯(lián),N.t表示文法符號(hào)N的屬性t。屬性值又稱語(yǔ)義值。存儲(chǔ)屬性值的變量又稱語(yǔ)義變量。每個(gè)斷言與文法的某個(gè)產(chǎn)生式相聯(lián),寫(xiě)在{}內(nèi)。屬性的斷言又稱語(yǔ)義規(guī)則,它所描述的工作可以包括屬性計(jì)算、靜態(tài)語(yǔ)義檢查、符號(hào)表的操作、代碼生成等,有時(shí)寫(xiě)成函數(shù)或過(guò)程段。第八頁(yè),共五十頁(yè)。6.1屬性文法(續(xù))例完成類型檢查的屬性文法E→T1+T2 {T1.t=intANDT2.t=int}E→T1orT2 {T1.t=boolANDT2.t=bool}T→num {T.t:=int}T→true {T.t:=bool}T→false {T.t:=bool}
第九頁(yè),共五十頁(yè)。6.1屬性文法(續(xù))屬性的分類:綜合屬性:從語(yǔ)法樹(shù)的角度來(lái)看,如果一個(gè)結(jié)點(diǎn)的某一屬性值是由該結(jié)點(diǎn)的子結(jié)點(diǎn)的屬性值計(jì)算來(lái)的,則稱該屬性為綜合屬性。內(nèi)在屬性是綜合屬性。用于“自下而上”傳遞信息第十頁(yè),共五十頁(yè)。6.1屬性文法(續(xù))繼承屬性從語(yǔ)法樹(shù)的角度來(lái)看,若一個(gè)結(jié)點(diǎn)的某一屬性值是由該結(jié)點(diǎn)的兄弟結(jié)點(diǎn)和(或)父結(jié)點(diǎn)的屬性值計(jì)算來(lái)的,則稱該屬性為繼承屬性。用于“自上而下”傳遞信息特別說(shuō)明:終結(jié)符只有綜合屬性,它們由詞法分析器提供非終結(jié)符既有綜合屬性也有繼承屬性,但文法開(kāi)始符沒(méi)有繼承屬性第十一頁(yè),共五十頁(yè)。6.1屬性文法(續(xù))例簡(jiǎn)單算術(shù)表達(dá)式求值的屬性文法L→E {Print(E.val)}E→E1+T {E.val:=E1.val+T.val}E→T {E.val:=T.val}T→T1*F {T.val:=T1.val*F.val}T→F {T.val:=F.val}F→(E) {F.val:=E.val}F→digit {F.val:=digit.lexval}
E.val、T.val、F.val都是綜合屬性終結(jié)符digit只有綜合屬性lexval
,它的值由詞法分析器提供第十二頁(yè),共五十頁(yè)。6.2語(yǔ)法制導(dǎo)翻譯概論語(yǔ)法制導(dǎo)翻譯基本思想:
在語(yǔ)法分析過(guò)程中,隨著分析的步步進(jìn)展,每當(dāng)使用一條產(chǎn)生式進(jìn)行推導(dǎo)(對(duì)于自上而下分析)或歸約(對(duì)于自下而上分析),就執(zhí)行該產(chǎn)生式所對(duì)應(yīng)的語(yǔ)義動(dòng)作(語(yǔ)義子程序),完成相應(yīng)的翻譯工作(產(chǎn)生中間代碼)。語(yǔ)法制導(dǎo)翻譯法不論對(duì)自上而下分析或自下而上分析都適用。第十三頁(yè),共五十頁(yè)。例簡(jiǎn)單算術(shù)表達(dá)式求值的屬性文法E→E1+T {E.val:=E1.val+T.val}E→T {E.val:=T.val}T→T1*digit{T.val:=T1.val*digit.lexval}T→digit {T.val:=digit.lexval}
2+3*5的語(yǔ)法樹(shù):EE1+TT1*5T23T.val=2T.val=3T.val=15E.val=2E.val=17自下而上語(yǔ)法制導(dǎo)翻譯過(guò)程:一旦語(yǔ)法分析確認(rèn)輸入符號(hào)串是一個(gè)句子,它的值也同時(shí)由語(yǔ)義規(guī)則計(jì)算出來(lái)第十四頁(yè),共五十頁(yè)。6.3中間代碼的形式定義: 中間代碼是獨(dú)立于機(jī)器,復(fù)雜性介于源語(yǔ)言和機(jī)器語(yǔ)言之間,十分接近目標(biāo)機(jī)器指令的一種表示形式。使用中間代碼的好處:中間代碼與具體機(jī)器無(wú)關(guān),便于編譯程序改變目標(biāo)機(jī)便于對(duì)中間代碼進(jìn)行與機(jī)器無(wú)關(guān)的優(yōu)化表示形式: 逆波蘭式、四元式、三元式、間接三元式和樹(shù)形表示第十五頁(yè),共五十頁(yè)。6.3.1逆波蘭表示法(后綴式)
逆波蘭表示法 將運(yùn)算對(duì)象寫(xiě)在前面,把運(yùn)算符寫(xiě)在后面,因而也稱后綴式。 例如:程序設(shè)計(jì)語(yǔ)言中的表示逆波蘭表示a+bab+a+b*cabc*+(a+b)*cab+c*第十六頁(yè),共五十頁(yè)。bt1dct1t2t1t3t1=-bt2=c*dt3=t1+t2例:表達(dá)式-b+c*d的后綴式b@cd*+的計(jì)值過(guò)程后綴式的計(jì)算機(jī)處理后綴式的最大優(yōu)點(diǎn)是易于計(jì)算機(jī)處理處理過(guò)程: 從左到右掃描后綴式,每碰到運(yùn)算對(duì)象就推進(jìn)棧;碰到運(yùn)算符就從棧頂彈出相應(yīng)目數(shù)的運(yùn)算對(duì)象施加運(yùn)算,并把結(jié)果推進(jìn)棧。最后的結(jié)果留在棧頂。第十七頁(yè),共五十頁(yè)。逆波蘭表示法的擴(kuò)充 逆波蘭表示法很容易擴(kuò)充到表達(dá)式以外的范圍 例如:語(yǔ)句逆波蘭表示備注a:=b+cabc+:=:=看作二目運(yùn)算符GOTOLLjumpjump看成一目運(yùn)算符,表示GOTOIfEthenS1elseS2ES1S2¥把¥看成三目運(yùn)算符,表示if–then–else第十八頁(yè),共五十頁(yè)。6.3.2三元式三元式
(算符op,第一個(gè)運(yùn)算對(duì)象ARG1,第二個(gè)運(yùn)算對(duì)象ARG2)說(shuō)明:三元式的某些運(yùn)算對(duì)象是另一個(gè)三元式的編號(hào)(代表其結(jié)果)一目算符只需選用一個(gè)運(yùn)算對(duì)象(ARG1)多目算符可用連續(xù)幾個(gè)三元式表示 例:
a:=b*c+b*d表示為(1)(*, b, c )(2)(*, b, d )(3)(+, (1), (2) )(4)(:=, (3), a )第十九頁(yè),共五十頁(yè)。6.3.3樹(shù)形表示樹(shù)形表示 二目運(yùn)算對(duì)應(yīng)二叉子樹(shù),多目運(yùn)算對(duì)應(yīng)多叉子樹(shù),但通常通過(guò)引入新結(jié)點(diǎn)表示成二叉子樹(shù)。
例如:a:=b*c+b*d表示成:=a+**bcbd葉子結(jié)點(diǎn)代表運(yùn)算量,非葉子結(jié)點(diǎn)代表運(yùn)算符第二十頁(yè),共五十頁(yè)。6.3.4四元式四元式 四元式是一種比較普遍采用的中間代碼形式
(算符op,ARG1,ARG2,運(yùn)算結(jié)果RESULT)例如:a:=b*c+b*d的四元式表示如下:(*, b, c, t1)(*, b, d, t2)(+, t1, t2, t3)(:=, t3, -, a)其中ti(i=1,2,3)是編譯程序引入的臨時(shí)變量第二十一頁(yè),共五十頁(yè)。6.3.4四元式(續(xù))四元式的優(yōu)點(diǎn):四元式比三元式更便于優(yōu)化 優(yōu)化要求改變運(yùn)算順序或刪除某些運(yùn)算,引起編號(hào)的變化。 三元式通過(guò)編號(hào)引用中間結(jié)果,編號(hào)的變化引起麻煩;四元式通過(guò)臨時(shí)變量引用中間結(jié)果,編號(hào)變化無(wú)影響。四元式對(duì)生成目標(biāo)代碼有利 四元式表示很類似于三地址指令,很容易轉(zhuǎn)換成機(jī)器代碼。第二十二頁(yè),共五十頁(yè)。6.3.4四元式(續(xù))四元式的另一種表示 有時(shí)為了更直觀,把四元式寫(xiě)成簡(jiǎn)單賦值形式或更易理解的形式(三地址碼)四元式直觀形式(1)(*,b,c,t1)(1)t1:=b*c(2)(*,b,d,t2)(2)t2:=b*d(3)(+,t1,t2,t3)(3)t3:=t1+t2(4)(:=,t3,-,a)(4)a:=t3第二十三頁(yè),共五十頁(yè)。6.3.5間接三元式為了便于優(yōu)化處理,不直接使用三元式,而是另設(shè)一張指示器表(稱為間接碼表),它按照運(yùn)算的先后順序列出有關(guān)三元式在三元式表中的位置。即:用一張間接碼表輔以三元式表的方法來(lái)表示中間代碼。四元式、間接三元式的優(yōu)化同樣方便,三元式的優(yōu)化十分困難。第二十四頁(yè),共五十頁(yè)。舉例:給出A+B*(C-D)+E/(C-D)^N的逆波蘭式、四元式、三元式、間接三元式的表示1、逆波蘭式:ABCD-*+ECD-N^/+2、四元式:(-,C,D,T1)(*,B,T1,T2)(+,A,T2,T3)(-,C,D,T4)(^,T4,N,T5)(/,E,T5,T6)(+,T3,T6,T7)第二十五頁(yè),共五十頁(yè)。舉例:給出A+B*(C-D)+E/(C-D)^N的逆波蘭式、四元式、三元式、間接三元式的表示3、三元式:(-,C,D)(*,B,1))(+,A,2))(-,C,D)(^,4),N)(/,E,5))(+,3),6))4、間接三元式:(-,C,D)(*,B,1))(+,A,2))(^,1),N)(/,E,4))(+,3),5))間接碼表1)2)3)1)4)5)6)第二十六頁(yè),共五十頁(yè)。6.4語(yǔ)法制導(dǎo)翻譯主要討論自下而上的語(yǔ)法制導(dǎo)翻譯在一個(gè)產(chǎn)生式進(jìn)行歸約時(shí),執(zhí)行相應(yīng)的語(yǔ)義動(dòng)作進(jìn)行翻譯(產(chǎn)生中間代碼)第二十七頁(yè),共五十頁(yè)。簡(jiǎn)單賦值語(yǔ)句到四元式的翻譯簡(jiǎn)單賦值語(yǔ)句 是指不含復(fù)雜數(shù)據(jù)類型(如數(shù)組,記錄等)的賦值語(yǔ)句。賦值語(yǔ)句的語(yǔ)義檢查包括:每個(gè)使用性標(biāo)識(shí)符是否都有聲明?運(yùn)算符的分量類型是否相容?賦值語(yǔ)句的左右部的類型是否相容?賦值語(yǔ)句的翻譯目標(biāo): 在賦值語(yǔ)句右部表達(dá)式產(chǎn)生的四元式序列后加一條賦值四元式第二十八頁(yè),共五十頁(yè)。簡(jiǎn)單賦值語(yǔ)句到四元式的翻譯考慮如下文法描述的簡(jiǎn)單賦值句的翻譯:A→i:=EE→E+E|E*E|-E|(E)|i(6.1)A代表賦值語(yǔ)句,設(shè)只含整型變量的運(yùn)算1、需要定義一系列的語(yǔ)義變量和語(yǔ)義過(guò)程:NEWTEMP:函數(shù),生成臨時(shí)變量,每次調(diào)用生成一個(gè)新的臨時(shí)變量,如t1,t2,…返回一個(gè)整數(shù)碼作為函數(shù)值。ENTRY(i):函數(shù)過(guò)程,查找并取得與i相對(duì)應(yīng)的標(biāo)識(shí)符在符號(hào)表中的位置(入口),簡(jiǎn)稱i值。E.PLACE:與E相聯(lián)系的語(yǔ)義變量,表示存放E值的變量名在符號(hào)表的入口。GEN(OP,ARG1,ARG1,RESULT):語(yǔ)義過(guò)程,將四元式(OP,ARG1,ARG1,RESULT)填進(jìn)四元式表中。第二十九頁(yè),共五十頁(yè)。使用上述變量和過(guò)程,對(duì)文法6.1所定義的賦值語(yǔ)句的翻譯算法可由下述語(yǔ)義動(dòng)作予以描述簡(jiǎn)單賦值語(yǔ)句到四元式的翻譯產(chǎn)生式語(yǔ)義動(dòng)作A→i:=E{GEN(:=,E.PLACE,-,ENTRY(i))}E→E(1)+E(2){E.PLACE:=NEWTEMP;GEN(+,E(1).PLACE,E(2).PLACE,E.PLACE)}E→E(1)*E(2){E.PLACE:=NEWTEMP;GEN(*,E(1).PLACE,E(2).PLACE,E.PLACE)}E→-E(1){E.PLACE:=NEWTEMP;GEN(@,E(1).PLACE,-,E.PLACE)}E→(E(1)){E.PLACE:=E(1).PLACE}E→i{E.PLACE:=ENTRY(i)}第三十頁(yè),共五十頁(yè)。輸入串棧PLACE四元式A:=-B*(C+D):=-B*(C+D)iA-B*(C+D)i:=A_B*(C+D)i:=-A__*(C+D)i:=-iA__B*(C+D)i:=-EA__B(@,B,-,T1)*(C+D)i:=EA_T1(C+D)i:=E*A_T1_C+D)i:=E*(A_T1__+D)i:=E*(iA_T1__C+D)i:=E*(EA_T1__CD)i:=E*(E+A_T1__C_)i:=E*(E+iA_T1__C_D)i:=E*(E+EA_T1__C_D(+,C,D,T2))i:=E*(EA_T1__T2i:=E*(E)A_T1__T2_i:=E*EA_T1_T2(*,T1,T2,T3)i:=EA_T3(:=,T3,-,A)A2例:寫(xiě)出下面賦值語(yǔ)句A:=-B*(C+D)的自下而上語(yǔ)法制導(dǎo)翻譯的過(guò)程,及生成的四元式。A→i:=EE→E+E|E*E|
-E|(E)|i四元式為:(1)(@,B,-,T1)(2)(+,C,D,T2)(3)(*,T1,T2,T3)(4)(:=,T3,-,A)第三十一頁(yè),共五十頁(yè)。3、類型轉(zhuǎn)換表達(dá)式中可能出現(xiàn)不同類型的變量和常量若不接受不同類型的運(yùn)算對(duì)象混合運(yùn)算,則應(yīng)指出錯(cuò)誤;若接受混合運(yùn)算則要進(jìn)行類型轉(zhuǎn)換處理。例:假定表達(dá)式可以有混合運(yùn)算,變量可以是整型和實(shí)型,且當(dāng)兩個(gè)不同類型的變量進(jìn)行運(yùn)算時(shí)先把整型變量轉(zhuǎn)換成實(shí)型,再進(jìn)行運(yùn)算。用+i,*i,
@i表示整型運(yùn)算,用+r,*r,@r表示實(shí)型運(yùn)算,用一目算符itr表示將整型量轉(zhuǎn)換成實(shí)型量的運(yùn)算令文法6.1中的i既可以是整型也可以是實(shí)型用E.MODE表示E的類型信息,其值為int或r,則產(chǎn)生式E→E(1)opE(2)的語(yǔ)義動(dòng)作中,關(guān)于E.MODE的語(yǔ)義規(guī)則可定義為:{ifE1.MODE=intANDE2.MODE=intthenE.MODE:=intelseE.MODE:=r}第三十二頁(yè),共五十頁(yè)。3、類型轉(zhuǎn)換(續(xù))E→E(1)opE(2)
的語(yǔ)義程序應(yīng)該修改,必要時(shí)產(chǎn)生對(duì)運(yùn)算量進(jìn)行類型轉(zhuǎn)換的四元式:(itr,A,-,T),表示把整型A轉(zhuǎn)換成實(shí)型量,結(jié)果存于T中。例:假定輸入串為X:=Y+I*J,其中X,Y為實(shí)型,I,J為整型,則其產(chǎn)生的四元式為:
(1)(*i,I,J,T1)(2)(itr,T1,-,T2)(3)(+r,Y,T2,T3)(4)(:=,T3,-,X)例:關(guān)于產(chǎn)生式E→E(1)opE(2)
的語(yǔ)義子程序更為具體的描述為:第三十三頁(yè),共五十頁(yè)。T:=NEWTEMP;IFE1.MODE=intANDE2.MODE=intTHENBEGINGEN(opi,E1.PLACE,E2.PLACE,T);E.MODE:=intENDELSEIFE1.MODE=rANDE2.MODE=rTHENBEGINGEN(opr,E1.PLACE,E2.PLACE,T);E.MODE:=rENDELSEIFE1.MODE=int/*ANDE2.MODE=r*/THENBEGIN U:=NEWTEMP;GEN(itr,E1.PLACE,-,U); GEN(opr,U,E2.PLACE,T);E.MODE:=rENDELSE/*E1.MODE=rANDE2.MODE=int*/
BEGIN U:=NEWTEMP;GEN(itr,E2.PLACE,-,U); GEN(opr,E2.PLACE,U,T);E.MODE:=rENDE.PLACE:=TE→E(1)opE(2)第三十四頁(yè),共五十頁(yè)。布爾表達(dá)式的兩個(gè)作用:用于邏輯運(yùn)算,計(jì)算邏輯值作為控制語(yǔ)句(如if-then,while)的條件表達(dá)式布爾表達(dá)式由布爾算符(not,and,or)作用于布爾變量(或常數(shù))或關(guān)系表達(dá)式而形成的。關(guān)系表達(dá)式的形式:E1ropE2,rop是關(guān)系算符(如<=,<,=,≠,>,>=)布爾表達(dá)式到四元式的翻譯第三十五頁(yè),共五十頁(yè)。為簡(jiǎn)單起見(jiàn),只考慮如下形式的布爾表達(dá)式的翻譯,文法(6.2) E→EorE|EandE|notE|(E)|idropid|id布爾算符的優(yōu)先順序(從高到低)為:not,and,or,且and和or都服從左結(jié)合,not服從右結(jié)合關(guān)系算符的優(yōu)先級(jí)都相同,而且高于任何布爾算符,低于任何算術(shù)算符布爾表達(dá)式到四元式的翻譯-續(xù)第三十六頁(yè),共五十頁(yè)。1.布爾表達(dá)式的計(jì)算方法:
采用兩種方法:數(shù)值表示的直接計(jì)算與邏輯表示的短路計(jì)算直接計(jì)算與算術(shù)表達(dá)式計(jì)算方法基本相同 如:1or0and1=1or0的結(jié)果為:1短路計(jì)算即布爾表達(dá)式計(jì)算到某一部分就可以得到結(jié)果,而無(wú)需對(duì)布爾表達(dá)式進(jìn)行完全計(jì)算??梢杂胕f-then-else來(lái)解釋
AorB ifAthentrueelseB AandB ifAthenBelsefalse notA ifAthenfalseelsetrue第三十七頁(yè),共五十頁(yè)。2、直接計(jì)算的語(yǔ)法制導(dǎo)翻譯布爾表達(dá)式有兩種翻譯方法。(視計(jì)算機(jī)硬件條件來(lái)確定,如果執(zhí)行條件轉(zhuǎn)移效率較低,就用第一種方法)直接計(jì)算的語(yǔ)法制導(dǎo)翻譯如同翻譯算術(shù)表達(dá)式一樣來(lái)翻譯布爾表達(dá)式如:AorBandnotC被翻譯成:
(1)(not, C, -, T1) (2)(and, B, T1, T2) (3)(or, A, T2, T3)第三十八頁(yè),共五十頁(yè)。3.作為條件控制的布爾式翻譯基本翻譯方法 當(dāng)布爾表達(dá)式用于控制條件時(shí),并不需要計(jì)算表達(dá)式的值,而是一旦確定了表達(dá)式為真或?yàn)榧伲蛯⒖刂妻D(zhuǎn)向相應(yīng)的代碼序列。S2的代碼S1的代碼E的代碼E.falseE.trueifEthenS1elseS2為布爾表達(dá)式E引入兩個(gè)新的屬性:E.true:表達(dá)式的真出口,它指向表達(dá)式為真時(shí)的轉(zhuǎn)向E.false:表達(dá)式的假出口,它指向表達(dá)式為假時(shí)的轉(zhuǎn)向第三十九頁(yè),共五十頁(yè)。把布爾表達(dá)式E翻譯成下述形式的條件轉(zhuǎn)移和無(wú)條件轉(zhuǎn)移的四元式序列:(jnz,A,-,p)
若A為真,則轉(zhuǎn)向四元式p(jrop,A,B,p)
若AropB為真,則轉(zhuǎn)向四元式p(j,-,-,p)
無(wú)條件轉(zhuǎn)向四元式p3.作為條件控制的布爾式翻譯-續(xù)第四十頁(yè),共五十頁(yè)。(1) (jnz,A,-,5) A的真出口為5(2) (j,-,-,3) A的假出口為3(3) (j<,B,D,5) B<D的真出口為5(4) (j,-,-,p+1) B<D的假出口為(p+1)(5) (關(guān)于S1的四元式序列)(p) (j,-,-,q) 跳過(guò)S2的代碼段(p+1) (關(guān)于S2的四元式序列)(q)(1)-(4)是布爾式AorB<D
翻譯產(chǎn)生的代碼,全部是條 件轉(zhuǎn)移和無(wú)條件轉(zhuǎn)移四元式,沒(méi)有布爾運(yùn)算。例:ifAorB<DthenS1elseS2翻譯成如下四元式序列第四十一頁(yè),共五十頁(yè)。具體說(shuō)明如下:
用E.true和E.false分別表示E的“真”和“假”出口轉(zhuǎn)移目標(biāo),在翻譯E時(shí)并未能確定。對(duì)于E為aropb
形式,生成代碼如下:
(jrop,a,b,E.true) (j,-,-,E.false)
以結(jié)構(gòu)圖表示:E的代碼E.falseE.true第四十二頁(yè),共五十頁(yè)。對(duì)于E為E1orE2的形式,生成代碼結(jié)構(gòu)如下:E1.的代碼E2.的代碼E1.falseE2.falseE.falseE1.trueE2.trueE.true若E1為真,則可知E為真,即E1的真出口和E的真出口一樣;若E1為假,則必須計(jì)算E2,因此E1的假出口應(yīng)是E2代碼的第一個(gè)四元式序號(hào);E2的真出口和假出口分別與E的真出口和假出口一樣第四十三頁(yè),共五十頁(yè)。E1.的代碼E2.的代碼E1.falseE2.falseE.falseE1.trueE2.trueE.true對(duì)于E為E1andE2的形式,生成代碼結(jié)構(gòu)如下:對(duì)于E為notE1形式,只需調(diào)換E1的真假出口,即可得到E的真假出口。第四十四頁(yè),共五十頁(yè)。例:E為a<borc<dande>f
,翻譯為四元式序列:(1)
( j<, a, b, E.true)(2)
( j, -, -, (3))(3)
( j<, c, d, (5))(4)
( j, -, -, E.false)(5)
( j>, e, f, E.true)(6)
( j, -, -, E.false)舉例真假出口的拉鏈與回填在把布爾式翻譯成一串條件轉(zhuǎn)和無(wú)條件轉(zhuǎn)四元式時(shí),真假出口未能在生成四元式時(shí)確定;而且多個(gè)四元式可能有相同的出口第四十五頁(yè),共五十頁(yè)。說(shuō)明:E.true和E.false不能在產(chǎn)生四元式的同時(shí)確定,要等將來(lái)目標(biāo)明確時(shí)再回填,為此要記錄這些要回填的四元式。通常采用“拉鏈”的辦法,把需要回填E.true的四元式拉成一條“真”鏈,把需要回填E.false的四元式拉成一條“假”鏈。ifa<borc<dande>fthenS1elseS2翻譯為四元式序列:(1)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 35208-2025液化石油氣瓶過(guò)流切斷閥
- 2026年施工流程優(yōu)化合同
- 2026年星際公司法務(wù)咨詢合同
- 2024年北京大興區(qū)高一(下)期末物理試題和答案
- 2026年廠房租賃合同
- 幼兒園安全隱患專項(xiàng)整治檢查表
- 2025年連平縣上坪鎮(zhèn)人民政府公開(kāi)招聘應(yīng)急救援中隊(duì)?wèi)?yīng)急隊(duì)員備考題庫(kù)及參考答案詳解1套
- 違規(guī)吃喝專項(xiàng)整治個(gè)人自查報(bào)告
- 2024年陜西陜煤澄合礦業(yè)有限公司招聘考試真題
- 2025年沭陽(yáng)輔警招聘真題及答案
- 裝置性違章培訓(xùn)
- 管理創(chuàng)新考試題及答案
- 食品公司飲料生產(chǎn)作業(yè)指導(dǎo)書(shū)
- 貴州省貴陽(yáng)市2024-2025學(xué)年九年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 八年級(jí)三角形教學(xué)課件教學(xué)
- 冠心病治療病例分享
- GB/T 19342-2024手動(dòng)牙刷一般要求和檢測(cè)方法
- 礦區(qū)尾礦庫(kù)生態(tài)環(huán)境綜合治理與修復(fù)項(xiàng)目修復(fù)驗(yàn)收和后期管理方案
- 北師大四年級(jí)數(shù)學(xué)上冊(cè)《總復(fù)習(xí)》課件
- 家庭農(nóng)場(chǎng)的商業(yè)計(jì)劃書(shū)(6篇)
- 高處安全作業(yè)培訓(xùn)
評(píng)論
0/150
提交評(píng)論