理学语法制导翻译及中间代码PPT学习教案_第1页
理学语法制导翻译及中间代码PPT学习教案_第2页
理学语法制导翻译及中间代码PPT学习教案_第3页
理学语法制导翻译及中间代码PPT学习教案_第4页
理学语法制导翻译及中间代码PPT学习教案_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1理学语法制导翻译及中间代码理学语法制导翻译及中间代码首先是语义分析和正确性检查,若正确首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。,则翻译成中间代码或目标代码。根据翻译的需要设置文法符号的属性,以根据翻译的需要设置文法符号的属性,以描述语法结构的语义。即语法制导翻译法使用描述语法结构的语义。即语法制导翻译法使用为工具来描述程序设计语言的语义。为工具来描述程序设计语言的语义。第1页/共68页(1) 属性属性 对文法的每一个符号,对文法的每一个符号, 引进一些属性,这些属性代表与引进一些属性,这些属性代表与文法符号相关的信息文法符号相关的信息,,如类型、值、存储位置等。

2、属性值,如类型、值、存储位置等。属性值,可以在语法分析过程中计算和传递。,可以在语法分析过程中计算和传递。属性分为两类属性分为两类:属性加工的过程即是语义的处理过程。属性加工的过程即是语义的处理过程。第2页/共68页其计算规则按其计算规则按“自下而上自下而上”方式进行,方式进行, 即规则即规则左部符号的某些属性根据其右部符号的属性和左部符号的某些属性根据其右部符号的属性和(或或)自己的其他自己的其他属性计算而得。在语法树中,一个结点的综合属性由该结点属性计算而得。在语法树中,一个结点的综合属性由该结点 的子结点的属性值确定。的子结点的属性值确定。其计算规则按其计算规则按“自上而下自上而下”方式

3、进行,方式进行, 即规则即规则右部符号的某些属性根据其左部符号的属性和右部符号的某些属性根据其左部符号的属性和(或或)右部其他右部其他符号的某些属性计算而得。继承属性值是由此结点的父结点符号的某些属性计算而得。继承属性值是由此结点的父结点和(或)兄弟结点的某些属性值来决定的。和(或)兄弟结点的某些属性值来决定的。第3页/共68页(2) 属性文法属性文法 属性文法包含一个上下文无关文法和一系列属性文法包含一个上下文无关文法和一系列语义规则语义规则。语义规则:语义规则:为文法的每一个规则配备的计算属性的计算规为文法的每一个规则配备的计算属性的计算规则,则, (描述语义处理的加工动作描述语义处理的加

4、工动作) 。 这些语义规则附在文法的每个产生式上,在语法分析过这些语义规则附在文法的每个产生式上,在语法分析过程中,执行语义规则描述的动作,从而实现语义处理。程中,执行语义规则描述的动作,从而实现语义处理。 即:即: 附在文法的每个产生式上的语义规则描述了语义处附在文法的每个产生式上的语义规则描述了语义处理的加工动作。理的加工动作。第4页/共68页A(G,V,F),), G: 是一个上下文无关文法是一个上下文无关文法 V: 有穷的属性集有穷的属性集,每个属性与文法的一终结符或非终结符每个属性与文法的一终结符或非终结符 相连。相连。 F: 关于属性的属性断言或谓词集关于属性的属性断言或谓词集.每

5、个断言与一个产生式每个断言与一个产生式 相联。一个断言即一个语义规则,描述各属性关系。相联。一个断言即一个语义规则,描述各属性关系。属性文法是一个三元组:属性文法是一个三元组: 属性文法的属性文法的主要思想主要思想有两点有两点: 对于每个文法符号引进相关的属性符号;对于每个文法符号引进相关的属性符号; 对于每个产生式写出属性值计算的规则。对于每个产生式写出属性值计算的规则。 第5页/共68页例如定义表达式的文法如下:例如定义表达式的文法如下: 为文法符号为文法符号E引进属性引进属性val表示表示E的值,记为的值,记为E.val,语义,语义规则以赋值语句的形式给出,附在每个产生式后。为了明确规则

6、以赋值语句的形式给出,附在每个产生式后。为了明确E的不同出现位置,用上角标区别。终结符的不同出现位置,用上角标区别。终结符n的值是词法分析程的值是词法分析程序提供的,这里用序提供的,这里用n.lex表示。下面给出属性文法:表示。下面给出属性文法: EE1+E2 E.val := E1.val +E2.val E(E1) E.val := E1.val En E.val := n.lexEE+E E(E)En 给出定义表达式值的属性文法。给出定义表达式值的属性文法。第6页/共68页例例1 表达式计算的语法制导定义表达式计算的语法制导定义 产生式产生式 语义规则语义规则LE print(E val

7、)E E1+T E val := E1 val+T valE T E val := T valT T1*F T val := T1 val+F valT F T val := F valF (E) F val := E valF digit F val := digit lexval第7页/共68页digitlexval:=3Fval:=3Tval:=3digitlexval:=5Fval:=5Tval:=15*Eval:=2+digitlexval:=2Fval:=2Tval:=2Eval:=17L例例2:输入:输入23*5 第8页/共68页例例2:变量说明的类型定义:变量说明的类型定义 i

8、nt a,b,c 产生式产生式 语义规则语义规则 DTL L in:=T type T int T type :=integer T real T type :=real L L1,id L1 in :=L in addtype(id entry,L in) L id addtype(id entry,L in)将将L.in的属性值的属性值置为该说明语句置为该说明语句T指定的类型指定的类型把每个标识符的把每个标识符的类型信息登录在类型信息登录在符号表相关项中符号表相关项中(虚属性)(虚属性)非终结符非终结符T有一综合属性有一综合属性type,它的值由关键字决定(,它的值由关键字决定(int或或

9、real)。)。 与产生式与产生式DTL相联的语义规则相联的语义规则L.in:=T.type,将,将L.in的属性值置为该说的属性值置为该说明语句指定的类型。明语句指定的类型。 属性属性L.in被沿着语法树下传到下边结点,与被沿着语法树下传到下边结点,与L产生式相联的规则里使用了它。产生式相联的规则里使用了它。 第9页/共68页TLLid3Lid2Did1int,1 entry2 entry3 entry4 type5 in 6 in7 in例如:例如:int a,b,c 第10页/共68页 综合属性可以在分析输入符号串的同时采用综合属性可以在分析输入符号串的同时采用自下而上的自下而上的分析器

10、分析器来计算。分析器可以保存与栈中文法符号有关的综合来计算。分析器可以保存与栈中文法符号有关的综合属性值,每当进行归约时,新的属性值就由栈中正在归约的属性值,每当进行归约时,新的属性值就由栈中正在归约的产生式右边符号的属性值来计算。产生式右边符号的属性值来计算。第11页/共68页总控程序总控程序outputInput#ACTIONGOTOLR分析表分析表栈栈状状态态符符号号语语义义S1X1S0#V1 S1XmVm第12页/共68页) 0 0 3 3* *) 05 05 2 2 3 3* *) r6 03 r6 03 * *) r4 02 r4 02 * *) r2 01 r2 01 * *)

11、016 016 * *) 0165 0165 * *) r6 0163 r6 0163 * *) r4 0169 r4 0169 * *) 01697 01697 * * ) 016975 -016975 - * * ) r6 01697510 r6 01697510 * * # #) (1515) ) ()() )接受)接受第13页/共68页第14页/共68页第15页/共68页 E.code:=E1.code|E2.code|op|) E.code:=E1.codeE.code:=idEE1 op E2E(E1) Eid 产生式产生式语义规则语义规则”|”为捻接运算,在机器内实现是通过数组,

12、利用为捻接运算,在机器内实现是通过数组,利用post数组存放后缀式数组存放后缀式,k为下标,初值为为下标,初值为1。则:当用产生式则:当用产生式EE1 + E2 归约句柄归约句柄E1 + E2 时,分别与时,分别与E1、E2相相关的后缀式子串关的后缀式子串E1.nptr、E2.nptr均已在均已在post 中,只需将运算符中,只需将运算符“+”放入放入post即可。即可。Postp:=“op”,p:=p+1Postp:=“id”,p:=p+1第16页/共68页例:例:EE+T ET TT*F TF F(E) Fi a+b*c生成后缀式生成后缀式# a # a b b* *c c 移进移进#a

13、+ b#a + b* *c# c# 归约归约 a a#F + b#F + b* *c# c# 归约归约#T + b#T + b* *c# c# 归约归约 #E + b#E + b* *c# c# 移进移进#E+ b #E+ b * *c# c# 移进移进#E+b #E+b * * c# c# 归约归约 abab#E+F #E+F * * c# c# 归约归约#E+T #E+T * * c# c# 移进移进#E+T#E+T* * c # c # 移进移进#E+T#E+T* *c # c # 归约归约 abcabc#E+T#E+T* *F # F # 归约归约 abcabc* *#E+T # #E

14、+T # 归约归约 abcabc* *+ +#E#E第17页/共68页第18页/共68页第19页/共68页n 一般形式为一般形式为:(:(i)()(op,arg1,arg2)其中:其中:(i)为三元式编码,也代表了该式的运算结果。为三元式编码,也代表了该式的运算结果。n 例:例:a:=-b*(c+d) 其三元式表示写成:其三元式表示写成: (1)(-,b, ) (2)(+,c,d) (3)(*,(1),(2) (4)(:=,a,(,(3))n 特点:三元式比四元式空间少;三元式间的相互引用频特点:三元式比四元式空间少;三元式间的相互引用频繁,因此不便于优化。为此引入间接三元式。繁,因此不便于优

15、化。为此引入间接三元式。第20页/共68页1、:1)LOOKUP(name):):以以name(变量名)查符号表,若在(变量名)查符号表,若在符号中,则将其表项位置(入口位置)作为符号中,则将其表项位置(入口位置)作为LOOKUP的值,的值,否则,取值为否则,取值为null。2)ENTER(name):):在符号表中以名字在符号表中以名字name新登记一项新登记一项,并将此项的位置作为,并将此项的位置作为enter值。值。3)ENTRY(name):以:以name为名查、添符号表,描述为:为名查、添符号表,描述为: function entry(name) entry:=lookup(name

16、); if entry=null then entry:=enter(name) 对于先说明后使用的语言,若在对于先说明后使用的语言,若在翻译表达式时,遇到的变量名不翻译表达式时,遇到的变量名不在表中,则程序出错。即在表中,则程序出错。即 if entry=null then error第21页/共68页5)GEN(op,arg1,arg2,result):产生一个四元式将它:产生一个四元式将它送入四元式表中,并以此四元式在四元式表中的位置作为返送入四元式表中,并以此四元式在四元式表中的位置作为返回值。回值。4) Newtemp函数函数,产生一个新的临时变量。返回值为标识此,产生一个新的临时变

17、量。返回值为标识此临时变量的整数码。临时变量的整数码。6) E.place属性:表示存放属性:表示存放E值的变量名在符号表的入口或整值的变量名在符号表的入口或整数码(若数码(若E是临时变量)。是临时变量)。 第22页/共68页Sid:=E GEN(:=,E.place,_,ENTRY(id) )EE1+E2 E.place:=newtemp; GEN(+,E1.place,E2.place,E.place)EE1*E2 E.place:=newtemp; GEN(*,E1.place,E2.place,E.place)E-E1 E.place:=newtemp; GEN(-,E1.place,

18、 _ ,E.place) E(E1) E.place:=E1.place; Eid E.place:=ENTRY(id) 产生式产生式语义规则语义规则实例实例第23页/共68页# A := B# A := B* *(C+D) (C+D) #A := B#A := B* *(C+D) A (C+D) A #A:= B #A:= B * *(C+D) A_ (C+D) A_ #A:=B #A:=B * * (C+D) A_ B (C+D) A_ B ,归约,归约 #A:=E #A:=E * * (C+D) A_ B (C+D) A_ B #A:=E#A:=E* * ( C+D) A_ B_ ( C

19、+D) A_ B_ #A:=E#A:=E* *( C +D) A_ B_ _( C +D) A_ B_ _#A:=E#A:=E* *(C + D) A_ B_ _C,(C + D) A_ B_ _C,归约归约 #A:=E#A:=E* *(E + D) A_ B_ _C (E + D) A_ B_ _C #A:=E#A:=E* *(E+ D ) A_ B_ _C _ (E+ D ) A_ B_ _C _ #A:=E#A:=E* *(E+D ) # A_ B_ _C _D,(E+D ) # A_ B_ _C _D,归约归约 #A:=E#A:=E* *(E+E ) # A_ B_ _C _D,(E+

20、E ) # A_ B_ _C _D,归约归约 (+,C,D,T1)(+,C,D,T1)#A:=E#A:=E* *(E ) A_ B_ _T1(E ) A_ B_ _T1#A:=E#A:=E* *(E) # A_ B_ _T1_,(E) # A_ B_ _T1_,归约归约 #A:=E#A:=E* *E # A_ B_ T1,E # A_ B_ T1,归约归约 ( (* *,T1,B,T2),T1,B,T2)#A:=E # A_T2, #A:=E # A_T2, 归约归约 (:=,T2,-,A)(:=,T2,-,A)#E # ACC#E # ACC例如:例如:A:=B*(C+D)文法文法第24页/

21、共68页 实际上:在表达式运算中要考虑是否类型冲突,若有,实际上:在表达式运算中要考虑是否类型冲突,若有,需进行类型转换。需进行类型转换。Sid:=E if Sid:=E if id.type=intid.type=int & & E.type=int E.type=int thenthen GEN(:= GEN(:=,E.placeE.place,- -,id.place)id.place) ElseElse if if id.type=realid.type=real & & E.type=real E.type=real thenthen GEN(:= GEN(:=,E.placeE.p

22、lace,- -,id.place)id.place) ElseElse if if id.type=intid.type=int & & E.type=realE.type=real thenthen T:=newtemp; T:=newtemp; GEN(itr GEN(itr,id.placeid.place,- -,T)T) GEN(:= GEN(:=,E.placeE.place,- -,T)T) ElseElse if if id.type=real id.type=real & & E.type=intE.type=int thenthen T:=newtemp; T:=newt

23、emp; GEN(itr GEN(itr,E.placeE.place,- -,T)T) GEN(:= GEN(:=,T T,- -,id.place) id.place) 产生式语义规则第25页/共68页第26页/共68页用数值表示真假,对布尔表达式的求值可如同算术表达式求用数值表示真假,对布尔表达式的求值可如同算术表达式求值一步步计算。值一步步计算。例如:例如:ABCABC,其四元式为,其四元式为: : ( (,B B,C C,T1)T1) ( (,A A,T1T1,T2T2)采取某种优化措施。即采取某种优化措施。即将任何布尔表达式描述为等价的将任何布尔表达式描述为等价的if-then-e

24、lse结构。结构。 例例AB:if A then trueAB:if A then true else if B then true else if B then true else false else falseABAB:if A then if B then true if A then if B then true else false else false else false else false A A:if A then false else trueif A then false else true 很容易写出相应的很容易写出相应的四元式,从而表示出每个四元式,从而表示出每个

25、产生式的语义动作。产生式的语义动作。涉及如何翻译涉及如何翻译if-then-else结构的问结构的问题。题。第27页/共68页E.codeS1.codeE.true:S2.codeE.false:goto S.next.S.next:to E.trueto E.false(a) if-then-elseif-then?1)条件语句)条件语句 if E then S1 else S2 E的作用在于控制对的作用在于控制对 S1、S2的选择,因此结果无需最终保留。的选择,因此结果无需最终保留。通过程序的控制流,即用通过程序的控制流,即用程序中控制转移到达的位置程序中控制转移到达的位置来表示布尔表来表

26、示布尔表达式的值。达式的值。第28页/共68页对作为转移条件的布尔式,其转移可用下述三种四元式表示:对作为转移条件的布尔式,其转移可用下述三种四元式表示:若若A A为真为真(1(1或非或非0)0)则转向第则转向第P P四元式四元式若若A1 rop A2A1 rop A2为真,则转向第为真,则转向第P P四元式四元式无条件转向无条件转向P P四元式四元式例如:例如:if ABD then S1 else S2 翻译成四元式为:翻译成四元式为:(1) (jnz,A,-,?,?) A的真出口的真出口(2) (j,-,-,?),?) A的假出口的假出口(3) (j,B,D,?) BD的真出口的真出口(

27、4) (j,-, -, ? ) B=,B,D,P+1)(3)(4)合并改写合并改写(2)可删除可删除可优化吗?可优化吗?第29页/共68页翻译布尔式时要解决的问题翻译布尔式时要解决的问题第30页/共68页 E(1)的假出口为的假出口为E(2)的第一个四元式的第一个四元式 E(2)的真假即为的真假即为E的真假出口的真假出口E1.TCE2.FCE1E2E.TCE2.TCE1.FCE.FC T,E为为 T F,E为为 F第31页/共68页 若若E(1)为假,则为假,则E为假,因此为假,因此E(1) 的假出口是的假出口是E的假出口的假出口 若若E(1)为真,则计算为真,则计算E(2) E(2)的真假即

28、为的真假即为E的真假出口的真假出口 E(1)的真出口为的真出口为E(2)的第一个四元式的第一个四元式E1.FCE2.TCE1E2E.FCE2.FCE1.TCE.TCT,E为为T F,E为为F E(1)的真出口是的真出口是E的假出口;的假出口;E(1)的假出口是的假出口是E的真出口。的真出口。第32页/共68页第33页/共68页第34页/共68页 (1)()(jnz,A,-,0 ) (2)()(j,-,-,0 ) (3)()(j,B,D,0) (4)()(j,-,-,0 ) (5)关于)关于S1的四元式的四元式 (P)关于)关于S2的四元式的四元式13 ETC EFC拉链拉链回填回填55P例:例

29、:if ABD then S1 else S2回填回填第35页/共68页第36页/共68页第37页/共68页ETC:=NXQ,EFC:=NXQ+1 GEN(jnz,entry(id),-,0) GEN(j,-,-,0) (2) E id1 rop id2 ETC:=NXQ,EFC:=NXQ+1 GEN(jrop,entry(id1),entry(id2),-,0) GEN(j,-,-,0)(3) E (E1) ETC:=E1TC,EFC:=E1FC 第38页/共68页(4) E E1ETC:=E1FC,EFC:=E1TC (5) E E1BACKPATCH(E1TC,NXQ) E FC:=E1

30、FC(6) EE E2 ETC:=E2TC, EFC:=MERGE(EFC,E2 FC) 第39页/共68页 EFC:=E2FC, ETC:=MERGE(ETC ,E2 TC) (7) E E1 BACKPATCH(E1FC,NXQ) ETC:=E1TC(8) E E E2第40页/共68页例例: 重新考虑表达式重新考虑表达式ab or cd and ef 一棵作了注释的分析树如下图所示一棵作了注释的分析树如下图所示E.T=100,104E.F=103,105E1.T=100E1.F=101E4.T=104E4.F=103,105ORabE2.T=102E2.F=103E3.T=104E3.F

31、=105andcedf第41页/共68页 100 : ( j,a,b, 0 ) 101 : ( j,-,-, 0 ) 102 : ( j,c,d,0 ) 103 : ( j,-,-,0 ) 104 : ( j,e,f,0 ) 105 : ( j,-,-,0 ) 104103拉链拉链102100回填回填E.FC链首链首E.TC链首链首ab or cd and ef 的四元式的四元式 回填回填拉链拉链第42页/共68页 若若E用于条件语句用于条件语句if-then-else时,则当扫视到时,则当扫视到then时,应以当前时,应以当前NXQ值回填值回填E的的T链,对链,对F链,链,则在扫视到则在扫视

32、到else之后进行。之后进行。第43页/共68页NXQNXQ+1 NXQ+2t:=NEWTEMP; BACKPATCH(ETC,NXQ),), BACKPATCH(EFC,NXQ+2),), GEN(:=,1,-,t),), GEN(j,-,-,0),), GEN(:=,0,-,t第44页/共68页5.5 5.5 控制语句的翻译控制语句的翻译 S :语句语句 L:语句串语句串 SA:赋值语句赋值语句 E:布尔表达式布尔表达式第45页/共68页 例:例:if E then S1 else S2 E.TC只有在扫描到只有在扫描到then之后才能确定;之后才能确定; E.FC只有在处理了只有在处理了

33、S1之后,到达之后,到达else时才能明确。时才能明确。 因此,因此,E.FC应传递下去,以便到达相应的应传递下去,以便到达相应的else回填。回填。 布尔式布尔式E的两项语义值的两项语义值E.TC,E.FC,分别指示尚待回填,分别指示尚待回填“真真”、“假假”出口的四元式。出口的四元式。 另外,另外,S1语句执行后产生语句执行后产生(j,-,-,0),使控制离开整个,使控制离开整个if语句。语句。其转移目标应在其转移目标应在S2后确定。若后确定。若if语句有嵌套,则即使翻译完语句有嵌套,则即使翻译完S2,目标位置可能仍无法确定。,目标位置可能仍无法确定。第46页/共68页l 由此可知,由此可

34、知,转移目标的去向和语句所处的环境紧密相关。转移目标的去向和语句所处的环境紧密相关。l 解决办法:解决办法:为非终结符为非终结符S(和(和L)加上语义属性)加上语义属性chain,S.chain或或L.chain指示一条链的链头,该链将所有控制转指示一条链的链头,该链将所有控制转出内层语句出内层语句S的各个四元式连接的各个四元式连接(拉链拉链),在适当时候进行,在适当时候进行回填回填。l 对于对于while语句中的布尔式语句中的布尔式E,其假出口也将使控制离开整,其假出口也将使控制离开整个个while语句,同样采用语句,同样采用S.chain指示跳出指示跳出while的链头,的链头,待处理待处

35、理while语句的外层语句时回填。语句的外层语句时回填。第47页/共68页E.codeE.true:S1.code.to E.Tto E. F(S.chain)(a) While-do语句结构第48页/共68页E.codeS1.codeE.true:S2.codeE.false:goto S.chain.S.chain:to E.trueto E.false(b) if-then-else语句结构第49页/共68页 为了在翻译过程中及时进行拉链或回填处理,将文法为了在翻译过程中及时进行拉链或回填处理,将文法GS改写为改写为GS:(1)Cif E then (2) TP CS else (3)S

36、 CS(4)S TPS(5)Ls L; (6)LLsS(7)LS(8)W while (9)Wd WE do (10)SWdS (11)S begin L end(12)S SA 在在s1和和s2间插入一个间插入一个跳转四元式跳转四元式用用W.quad记录记录当前四元组的当前四元组的NXQ,为了跳回为了跳回循环循环反填反填E的真出的真出口,为下一个口,为下一个四元式。四元式。从;断开,用从;断开,用S的第一个四的第一个四元式反填。元式反填。第50页/共68页(1)Cif E then(2)SCS1 backpatch(E.TC,NXQ);); C.chain=E.FC /*IF-THEN语句的

37、出口为语句的出口为E.FC*/S.chain=MERGE(C.chain,S1.chain) /*C出口与出口与S1的出口一致,均为的出口一致,均为S出口,因此合并出口,因此合并*/语义值语义值S.chain将暂时保留在语义栈中,后续归约将暂时保留在语义栈中,后续归约过程的适当时候,它所指的链会被回填。过程的适当时候,它所指的链会被回填。/* C为条件子句为条件子句*/第51页/共68页(3)TP CS1 else q=NXQ; GEN(J,-,-,0); BACKPATCH(C.chain,NXQ); /*else后第一个四元式后第一个四元式*/ TP.chain=MERGE(q,s1.ch

38、ain) /*S1代码执行后,同样出控制,与代码执行后,同样出控制,与q的出的出口以及与口以及与TP出口一致出口一致*/* TP为真部子句为真部子句*/C.codeS1.codeE.TCqE.FCTP.chainC.chain第52页/共68页(4)S TPS2 (5)WWhile(6)WdW E doS.chain=MERGE(TP.chain,s2.chain)/*S2的出口和的出口和TP(整个整个if语句语句)出口是一致的出口是一致的*/W.quad=NXQ/*用用W.quad属性记录属性记录while语句首位置语句首位置*/ backpatch(E.TC,NXQ); Wd.chain=

39、E.FC; Wd.quad=W.quad/*对对E.TC回填,回填,E.FC为为while出口,出口,Wd.chain与与Wd.quad需进一步需进一步传递传递*/* Wd为为while子句子句*/第53页/共68页(7)SWd S1(8)SAbackpatch(S1.chain, Wd.quad); /*S1执行完后出口为执行完后出口为while语句语句*/ GEN(J,-,-,Wd.quad); S.chain=Wd.chain; S.chain=0 /*赋值语句不发生控制转移,因此赋值语句不发生控制转移,因此S的出口链为空链的出口链为空链*/(9)LSL.chain=S.chain /*

40、按此式归约时,按此式归约时,S的四元式已产生,由的四元式已产生,由S.chain指示的四元式链的链头指示的四元式链的链头传递给传递给L.chain,以便适当时机回填。,以便适当时机回填。*/第54页/共68页(10)LsL;(11)L Ls S(12)Sbegin L endbackpatch(L.chain=NXQ)/*L的四元式已产生,并且已扫描到的四元式已产生,并且已扫描到L的语句结束符;执行完的语句结束符;执行完L后应后应将控制转移到分号后的语句。将控制转移到分号后的语句。*/L.chain=S.chain /*S后控制应转向的目标尚待回填,故将有后控制应转向的目标尚待回填,故将有S.

41、chain所指示的四元式所指示的四元式链头传递给链头传递给L.chain。 */S.chain=L.chain第55页/共68页按照按照文法文法GS,该语句的生成树为:,该语句的生成树为:whileWEdoWdifEthenY + ZA BCX:=ESSSC D第56页/共68页1、按、按WWhile归约归约 W.quad=NXQ W.quadNXQ=100:分析语义,产生四元式分析语义,产生四元式2、E id1 rop id2 ETC:=NXQ,EFC:=NXQ+1 GEN(jrop,entry(id1),entry(id2),-,0) GEN(j,-,-,0) W.quadE.TC=100

42、:E.FC=101:NXQ=102:第57页/共68页3、 WdW E do backpatch(E.TC,NXQ); Wd.chain=E.FC; Wd.quad=W.quad 分析语义,产生四元式分析语义,产生四元式E.FC=101:NXQ=102: Wd.chainW.quad E.TC= 100:Wd.quad102第58页/共68页4、E id1 rop id2 ETC:=NXQ,EFC:=NXQ+1 GEN(jrop,entry(id1),entry(id2),-,0) GEN(j,-,-,0) NXQ=102:W.quad 100:E.FC=101: Wd.chainWd.qua

43、d102NXQ+1=103:E.TC E.FC NXQ=104:分析语义,产生四元式分析语义,产生四元式5、 Cif E then backpatch(E.TC,NXQ);); C.chain=E.FC NXQ=102:W.quad 100:E.FC=101: Wd.chainWd.quad102NXQ+1=103:E.TC E.FC NXQ=104:104 C.chain分析语义,产生四元式分析语义,产生四元式6、 EE1+E2 E.place:=newtemp; GEN(+,E1.place,E2.place,E.place) 7、 ASid:=E GEN(:=,E.place,_,ENTRY(id) /*赋值语句赋值语句*/分析语义,产生四元式分析语义,产生四元式 102:W.quad 100:E.FC=101: Wd.chainW

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论