网页制作技巧chapter5语法制导翻译.ppt课件.ppt

上传人(卖家):三亚风情 文档编号:3521774 上传时间:2022-09-11 格式:PPT 页数:133 大小:868.51KB
下载 相关 举报
网页制作技巧chapter5语法制导翻译.ppt课件.ppt_第1页
第1页 / 共133页
网页制作技巧chapter5语法制导翻译.ppt课件.ppt_第2页
第2页 / 共133页
网页制作技巧chapter5语法制导翻译.ppt课件.ppt_第3页
第3页 / 共133页
网页制作技巧chapter5语法制导翻译.ppt课件.ppt_第4页
第4页 / 共133页
网页制作技巧chapter5语法制导翻译.ppt课件.ppt_第5页
第5页 / 共133页
点击查看更多>>
资源描述

1、第五章第五章 语法制导翻译语法制导翻译 本章内容本章内容 介绍一种形式化的语义描述方法:介绍一种形式化的语义描述方法:语法制导语法制导的翻译的翻译,包括它的两种具体形式:,包括它的两种具体形式:语法制导语法制导的定义和翻译方案的定义和翻译方案。介绍语法制导的翻译的实现方法。介绍语法制导的翻译的实现方法。第五章第五章 语法制导翻译语法制导翻译v 翻译的任务:翻译的任务:语义分析和正确性检查,若语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。正确,则翻译成中间代码或目标代码。v 使用的方法使用的方法:称作语法制导翻译。称作语法制导翻译。v 基本思想基本思想:根据翻译的需要设置文法符号的根

2、据翻译的需要设置文法符号的属性属性,以描述语法结构的语义。,以描述语法结构的语义。第五章第五章 语法制导翻译语法制导翻译 属性属性1、定义:代表与文法符号(Vt或Vn)相关的信息。属性可以为任何特性。例如:变量的类型、层次,存储地址;表达式类型,值;程序的目标代码等。2、属性值:是指与属性相关的信息,可以在语法分析过程中计算和传递。3、属性的表示:X.属性值。注意:产生式的左、右部有相同的符号时用下标或上标来区别。例:EE1+TE.val:=E1.val+T.val第五章第五章 语法制导翻译语法制导翻译 1、语义规则(属性等式)为文法的每一个产生式(规则)配备的计算属性的计算规则。2、属性文法

3、为文法的每个符号引入一组属性,且让该文法附加上语义规则时,构成了属性文法。表示:文法规则(产生式)语义规则规则1相关的属性等式.规则n相关的属性等式据计算的依赖关系计算的依赖关系分成不相交不相交的两类:在分析树中,一个结点的综合属性值是从其的属性值计算出来的一个结点的继承属性值是由该结点和的属性值计算出来的。一般来说,语义翻译可按图的流程处理。一般来说,语义翻译可按图的流程处理。实际上,编译中语义翻译的实现并不是按图实际上,编译中语义翻译的实现并不是按图6.1 的流的流程处理的;而是随语法分析的进展,识别出一个语法程处理的;而是随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。

4、结构,就对它的语义进行分析和翻译。4.1 语法制导的定义语法制导的定义例例简单台式计算器的语法制导定义简单台式计算器的语法制导定义产产 生生 式式语语 义义 规规 则则 L E n print(E.val)E E1+TE.val:=E1.val+T.valE TE.val:=T.valT T1*FT.val:=T1.val*F.valT FT.val:=F.valF(E)F.val:=E.valF digitF.val:=digit.lexval5.1.1 语法制导定义的形式语法制导定义的形式是对上下文无关文法的推广 每个文法符号有一组属性每个文法符号有一组属性 每个文法产生式每个文法产生式A

5、 有一组形式为有一组形式为b:=f(c1,c2,ck)的语义规则的语义规则,其中其中f 是函数,是函数,b和和c1,c2,ck 是该产生式文法符号的属性。是该产生式文法符号的属性。综合属性:综合属性:如果如果b是是A的属性,的属性,c1,c2,ck 是是产生式右部文法符号的属性或产生式右部文法符号的属性或A的其它属性。的其它属性。继承属性继承属性:如果:如果b是产生式右部某个文法符号是产生式右部某个文法符号X的属性。的属性。5.1.2 综合属性综合属性S属性定义属性定义:仅仅使用综合属性的语法制导定义仅仅使用综合属性的语法制导定义产产 生生 式式语语 义义 规规 则则 L E n print(

6、E.val)E E1+TE.val:=E1.val+T.valE TE.val:=T.valT T1*FT.val:=T1.val*F.valT FT.val:=F.valF(E)F.val:=E.valF digitF.val:=digit.lexval5.1.2 综合属性综合属性每个结点的属性值都标注出来的分析树叫做每个结点的属性值都标注出来的分析树叫做注注释分析树释分析树(annotated parse tree)8+5*2 n的注释的注释 分析树分析树digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T

7、.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=

8、8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.va

9、l=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val

10、=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digi

11、t.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性

12、的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性分析树各结点属性的计算可以自下而上地完成分析树各结点属性的计算可以自下而上地完成digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.2 综合属性综合属性注释分析树注释分析树:结

13、点的属性值都标注出来的分析树结点的属性值都标注出来的分析树digit.lexval=2LE.val=18nT.val=10E.val=8T.val=8F.val=8digit.lexval=8T.val=5+*F.val=5F.val=2digit.lexval=55.1.3 继承属性继承属性一结点的继承属性是由该结点的父结点和一结点的继承属性是由该结点的父结点和/或或兄弟结点的属性来定义的兄弟结点的属性来定义的,int id,id,id产产 生生 式式语语 义义 规规 则则 D TLL.in:=T.typeTintT.type:=integerTrealT.type:=realL L1,id

14、L1.in:=L.in;addtype(id.entry,L.in)Lidaddtype(id.entry,L.in)5.1.3 继承属性继承属性int id1,id2,id3的注释分析树的注释分析树DintT.type=integer,id3L.in=integerL.in=integerL.in=integerid2id1,属性依赖图属性依赖图属性依赖图属性依赖图,语义规则建立了属性之间的依赖关属性之间的依赖关系系,这些关系可以用图来表示,这样的图称为int id1,id2,id3 的分析树的依赖图的分析树的依赖图D intT,id3LLLid2id1,1 entry102entry3 e

15、ntryin 98in 76in 54 type for 分析树中每一结点分析树中每一结点n do for 结点结点n的文法符号的每一个属性的文法符号的每一个属性a do 为为a在依赖图中建立一个结点;在依赖图中建立一个结点;for 分析树中每一个结点分析树中每一个结点n do for 结点结点n所用产生式对应的每一条所用产生式对应的每一条 语义规则语义规则 b:f(c1,c2,ck)do for i:=1 to k do 从结点从结点ci到结点到结点b构造一条有向边;构造一条有向边;5.1.4 属性计算次序属性计算次序 拓扑排序拓扑排序是无环有向图的结点的一种排序m1,m2,mk,它使得边只

16、会从这个次序中先出现的结点到后出现的结点,也就是若mimj是从mi到mj的边,那么在此排序中mi先于mj。显然,依赖图的任何拓扑排序都是分析树中结点属性计算的一个正确次序,即按拓扑排序进行计算的话,用语义规则b:=f(c1,c2,ck)计算b时,属性c1,c2,ck已经计算过了。5.1.4 属性计算次序属性计算次序拓扑排序拓扑排序:结点的一种排序,使得边只会从该次序中:结点的一种排序,使得边只会从该次序中先出现的结点到后出现的结点。先出现的结点到后出现的结点。例:例:1,2,3,4,5,6,7,8,9,10D intT,id3LLLid2id1,1 entry102entry3 entryin

17、 98in 76in 54 type5.1.4 属性计算次序属性计算次序属性计算次序属性计算次序 构造输入的分析树构造输入的分析树D intT,id3LLLid2id1,1 entry102entry3 entryin 98in 76in 54 type5.1.4 属性计算次序属性计算次序属性计算次序属性计算次序 构造输入的分析树,构造属性依赖图构造输入的分析树,构造属性依赖图D intT,id3LLLid2id1,1 entry102entry3 entryin 98in 76in 54 type5.1.4 属性计算次序属性计算次序属性计算次序属性计算次序 构造输入的分析树,构造属性依赖图,

18、对结点进行构造输入的分析树,构造属性依赖图,对结点进行拓扑排序拓扑排序D intT,id3LLLid2id1,1 entry102entry3 entryin 98in 76in 54 type5.1.4 属性计算次序属性计算次序属性计算次序属性计算次序 构造输入的分析树,构造属性依赖图,对结点进行构造输入的分析树,构造属性依赖图,对结点进行拓扑排序,按拓扑排序的次序计算属性。拓扑排序,按拓扑排序的次序计算属性。D intT,id3LLLid2id1,1 entry102entry3 entryin 98in 76in 54 type5.1.4 属性计算次序属性计算次序语义规则的计算方法语义规

19、则的计算方法 分析树方法:前面介绍的方法。分析树方法:前面介绍的方法。基于规则的方法:基于规则的方法:在构造编译器时,用在构造编译器时,用 手工或专门的工具来分析语义规则手工或专门的工具来分析语义规则,静态确定静态确定语语义规则的计算次序义规则的计算次序。忽略规则的方法:忽略规则的方法:事先确定属性的计算策略事先确定属性的计算策略(如边分析边计算),那么语义规则的设计(如边分析边计算),那么语义规则的设计必须符合所选分析方法的限制必须符合所选分析方法的限制.5.2 语法树的构造语法树的构造5.2.1 语法树语法树 语法树是分析树的浓缩表示语法树是分析树的浓缩表示:算符和关键字是作为算符和关键字

20、是作为内部结点。内部结点。语法制导翻译可以基于分析树,也可以基于语法树语法制导翻译可以基于分析树,也可以基于语法树 语法树的例子:语法树的例子:if-then-elseBS1S2+*2585.2 语法树的构造语法树的构造语法树是常用的一种中间表示形式,把语法分析语法树是常用的一种中间表示形式,把语法分析和翻译分开。语法分析过程中完成翻译有许多和翻译分开。语法分析过程中完成翻译有许多优点,但也有一些不足:优点,但也有一些不足:1.适于语法分析的文法可能不完全反映语言适于语法分析的文法可能不完全反映语言成分的自然层次结构;成分的自然层次结构;2.语法分析方法限制,对分析树结点的访问语法分析方法限制

21、,对分析树结点的访问序和翻译需要的访问序不一致。序和翻译需要的访问序不一致。5.2 语法树的构造语法树的构造 1.mknode(op,left,right)建立一个建立一个结点,标号结点,标号是是op,两个域两个域left和和right指向运算分量结点的指针。指向运算分量结点的指针。2mkleaf(id,entry)建立一个建立一个结点结点,由标号由标号id标识,标识,一个域一个域entry指向标识符符号表中相应的项。指向标识符符号表中相应的项。3.mkleaf(num,val)建立一个建立一个结点,标号为结点,标号为num,域域val用于存放数的值。用于存放数的值。idto entry an

22、um 4 idto entry c +5.2 语法树的构造语法树的构造产产 生生 式式语语 义义 规规 则则 E E1+T E.nptr:=mknode(+,E1.nptr,T.nptr)E TE.nptr:=T.nptrT T1*FT.nptr:=mknode(*,T1.nptr,F.nptr)T FT.nptr:=F.nptrF (E)F.nptr:=E.nptrF idF.nptr:=mkleaf(id,id.entry)F numF.nptr:=mkleaf(num,num.val)idto entry anum 4 idto entry c +5.2 语法树的构造语法树的构造a+5*

23、b的语法树的构造的语法树的构造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+*F.nptrF.nptridnumididnum 5*+指向符号表中指向符号表中a的入口的入口指向符号表中指向符号表中b的入口的入口 而语法制导定义中语义规则的执行受输入的语法的制导,当识别出输入串的一个语法结构时(可以看成发生一个事件),执行其相应的动作,因此这是一种事件驱动的程序设计。(DirectedAcyclicGraph,简称DAG)提取表达式中的公共子表达式,以取提取表达式中的公共子表达式,以取 得目标程序的局部优化。得目标程序的局部优化。执行执行mknode和和mklea

24、f时,时,检查是否检查是否已有相同的结点已有相同的结点,若有,则返回相应结点的指针。若有,则返回相应结点的指针。+*d+*acb5.3 S属性定义的自下而上计属性定义的自下而上计算算 综合属性可以由自下而上的分析器在分析输入时完成计算。分析器可以把文法符号的综合属性值放在它的栈里,每当归约时,根据出现在栈顶的产生式右部符号的属性来计算左部符号的综合属性。我们说明如何扩展分析器的栈使之能够保存综合属性 S属性定义的翻译器可以借助LR分析器的生成器来实现5.3 S属性定义的自下而上计算属性定义的自下而上计算将将LR分析器分析器分析栈中增加分析栈中增加一个域来保存综合属性值一个域来保存综合属性值。.

25、ZZ.zYY.yXX.x.栈栈 state valtop若产生式若产生式A XYZ的语义规则是的语义规则是A.a:=f(X.x,Y.y,Z.z),那么归约后:那么归约后:.AA.a.top4.2 S属性定义的自下而上计算属性定义的自下而上计算台式计算器的语法制导定义改成栈操作代码台式计算器的语法制导定义改成栈操作代码.ZZ.zYY.yXX.x.栈栈 state valtop产产 生生 式式代代 码码 段段 L E nprint(E.val)E E1+TE.val:=E1.val+T.valE TE.val:=T.valT T1*FT.val:=T1.val*F.valT FT.val:=F.v

26、alF(E)F.val:=E.valF digitF.val:=digit.lexval4.2 S属性定义的自下而上计算属性定义的自下而上计算台式计算器的语法制导定义改成栈操作代码台式计算器的语法制导定义改成栈操作代码.ZZ.zYY.yXX.x.栈栈 state valtop产产 生生 式式代代 码码 段段 L E nprint(val top 1)E E1+Tval top 2 :=val top 2+val top E TT T1*Fval top 2 :=val top 2 val top T FF(E)val top 2 :=val top 1F digit3*5+4n-*5+4n33

27、*5+4nF3Fdigit*5+4nT3TF5+4nT*3-+4nT*53-5+4nT*F3-5Fdigit+4nT15TT*F+4nE15ET4nE+15-nE+415-4nE+F15-4FdigitnE+T15-4TFnE19EE+TEn19-L19LEn 采用采用,例如,例如LR分析,首先分析,首先给出给出,然后,把,然后,把S-属性定义变成属性定义变成可执行的代码段可执行的代码段,这就构成了翻译程序。,这就构成了翻译程序。一种自然的计算属性的顺序是按深度优先一种自然的计算属性的顺序是按深度优先访问分析树结点的顺序,它适应多种自底向上访问分析树结点的顺序,它适应多种自底向上和自顶向下的翻

28、译方法。和自顶向下的翻译方法。L-属性定义属性定义 可用于按深度优先顺序计算属可用于按深度优先顺序计算属性值。性值。PROCEDURE dfvisit(n:node);BEGIN FOR n 的每个子结点的每个子结点m,从左至右从左至右 DO BEGIN 计算计算m的的继承继承属性;属性;dfvisit(m)END;计算计算n的的综合综合属性属性 END;定义定义 一个语法制导定义是一个语法制导定义是,如果,如果 P,其每一个语义规则中的每其每一个语义规则中的每一个属性都是一个综合属性,或是一个属性都是一个综合属性,或是Xj(1 j n)的一个继承属性,这个继承属性仅依赖于的一个继承属性,这个

29、继承属性仅依赖于 12变量类型声明的语法制导定义是变量类型声明的语法制导定义是一个一个L属性定义属性定义产产 生生 式式语语 义义 规规 则则 D TLL.in:=T.typeTintT.type:=integerTrealT.type:=realL L1,idL1.in:=L.in;addtype(id.entry,L.in)Lidaddtype(id.entry,L.in)ALMA QRL.i:=l(A.i)M.i:=m(L.s)A.s:=f(M.s)R.i:=r(A.i)Q.i:=q(R.s)A.s:=f(Q.s)ETR Raddop T print(addop.lexeme)R1|Tn

30、umprint(num.val)9 5-2+例例 把有加和减的中缀表达式翻译成后缀表达式把有加和减的中缀表达式翻译成后缀表达式如果输入是如果输入是8+5 2,则输出是,则输出是8 5+2 。E T RR addop T print(addop.lexeme)R1|T num print(num.val)E T R num print(8)R numprint(8)addop Tprint(+)R numprint(8)addop numprint(5)print(+)R print(8)print(5)print(+)addop Tprint()R print(8)print(5)print(

31、+)print(2)print()ET9TRR-5+T2R ETR Raddop T print(addop.lexeme)R1|Tnum print(num.val)例例 数学排版语言数学排版语言EQN例例 数学排版语言数学排版语言EQN E sub 1 .val S B B B1 B2 B B1 sub B2 B text E1.val例例 数学排版语言数学排版语言EQN例例 数学排版语言数学排版语言EQN E sub 1 .val 产产 生生 式式 语语 义义 规规 则则 S B B.ps:=10;S.ht:=B.ht B B1 B2 B1.ps:=B.ps;B2.ps:=B.ps;B.

32、ht:=max(B1.ht,B2.ht)B B1 sub B2 B1.ps:=B.ps;B2.ps:=shrink(B.ps);B.ht:=disp(B1.ht,B2.ht)B text B.ht:=text.h B.ps E1.val例例 数学排版语言数学排版语言EQN例例 数学排版语言数学排版语言EQN S B.ps:=10 BS.ht:=B.ht B B1.ps:=B.ps B1B2.ps:=B.ps B2B.ht:=max(B1.ht,B2.ht)B B1.ps:=B.ps B1sub B2.ps:=shrink(B.ps)B2B.ht:=disp(B1.ht,B2.ht)B text

33、 B.ht:=text.h B.ps 为每一个语义规则建立一个包含赋值的动作,并为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式把这个动作放在相应的产生式的的。例如:语法和语义规则如下,请写出其翻译模式:例如:语法和语义规则如下,请写出其翻译模式:TT1*F T val:=T1 val*F val解:解:TT1*F T val:=T1 val*F valSAaAa边分析边翻译的方式能否用于继承属性边分析边翻译的方式能否用于继承属性?属性的计算次序一定受分析方法所限定的分析树结属性的计算次序一定受分析方法所限定的分析树结点建立次序的限制。点建立次序的限制。分析树的结点是自左向

34、右生成。分析树的结点是自左向右生成。如果属性信息是自左向右流动,那么就有可能在分如果属性信息是自左向右流动,那么就有可能在分析的同时完成属性计算。析的同时完成属性计算。用翻译模式构造自顶向下翻译。用翻译模式构造自顶向下翻译。对于一个翻译模式,若采用自顶向下分析,对于一个翻译模式,若采用自顶向下分析,和和,在改写基本文法时考虑属,在改写基本文法时考虑属性值的计算。性值的计算。E E1+TE val:=E1 val+T val E E1-T E val:=E1 val-T val E T E.val:=T val T (E)T val:=E val T num T val:=num val 例例6

35、.14 图图6.13的带左递归的文法的翻译模式的带左递归的文法的翻译模式被转换成图被转换成图6.14的带右递归的文法的翻译模式。的带右递归的文法的翻译模式。ET R i:=T val RE val:=R s R TR1 i:=R.i+T.val R1R.s:=R1 s R-TR1 i:=R i-T val R1R s:=R1 s RR s:=R i T(E)T val:=E.val Tnum T val:=num val 继承属性继承属性i综合属性综合属性sE val=6T val=9R i=9;R s=69T val=55R i=4;R s=6+T val=2R i=6;R s=62 T v

36、al=9R i=9T val=5R i=4T val=2R i=6R s=6R s=6R s=6E val=6关于左递归翻译模式更一般化的讨论关于左递归翻译模式更一般化的讨论左递归翻译模式左递归翻译模式 AA1YA.a:=g(A1.a,Y.y)AX A.a:=f(X.x)(6.2)每一个文法符号都有一个每一个文法符号都有一个综合属性综合属性,用,用相应的小写字母相应的小写字母表示,表示,g和和f是任意函数。是任意函数。消除左递归消除左递归,文法转换成,文法转换成 AX R RY R|(6.3)再考虑语义动作,翻译模式变为:再考虑语义动作,翻译模式变为:AX R i:=f(X x)R A.a:=

37、R.s RY R1 i:=g(R i,Y y)R1 R s:=R1 s RR s:=R i (6.4)经过转换的翻译模式,使用经过转换的翻译模式,使用R的继承属性的继承属性i和综合属性和综合属性s。Y2Y1X采用左递归翻译模式采用左递归翻译模式AAAA a=g(g(f(X x),Y1 y),Y2 y)A a=g(f(X x),Y1 y)A a=f(X x)AY Y2 2Y Y1 1X XRRRR i=f(X x)R i=g(f(X x),Y1 y)R i=g(g(f(X x),Y1 y),Y2 y)消除左递归后翻译模式消除左递归后翻译模式例例 左递归的消除引起继承属性左递归的消除引起继承属性例

38、例 左递归的消除引起继承属性左递归的消除引起继承属性产产 生生 式式语语 义义 规规 则则 E E1+T E.nptr:=mknode(+,E1.nptr,T.nptr)E TE.nptr:=T.nptrT T1*FT.nptr:=mknode(*,T1.nptr,F.nptr)T FT.nptr:=F.nptrF (E)F.nptr:=E.nptrF idF.nptr:=mkleaf(id,id.entry)F numF.nptr:=mkleaf(num,num.val)例例 左递归的消除引起继承属性左递归的消除引起继承属性E T R.i:=T.nptrRE.nptr:=R.sR +TR1.

39、i:=mknode(+,R.i,T.nptr)R1R.s:=R1.sR R.s:=R.i T F W.i:=F.nptrWT.nptr:=W.sW *FW1.i:=mknode(*,W.i,F.nptr)W1W.s:=W1.sW W.s:=W.i 例例 左递归的消除引起继承属性左递归的消除引起继承属性E T R.i:=T.nptr T+T+T+RE.nptr:=R.sR +TR1.i:=mknode(+,R.i,T.nptr)R1R.s:=R1.sR R.s:=R.i T F W.i:=F.nptrWT.nptr:=W.sW *FW1.i:=mknode(*,W.i,F.nptr)W1W.s:

40、=W1.sW W.s:=W.i 例例 左递归的消除引起继承属性左递归的消除引起继承属性TF.nptrF.nptridi W*F.nptridnumididnum 5*指向符号表中指向符号表中a的入口的入口指向符号表中指向符号表中b的入口的入口i Wsi W 略去了略去了E TR T 部分部分5.5.2 预测翻译器的设计预测翻译器的设计把预测分析器的构造方法推广到翻译方案的实现把预测分析器的构造方法推广到翻译方案的实现产生式产生式R +TR|的分析过程的分析过程procdure R;beginif lookahead=+then beginmatch(+);T;Rendelse begin /*

41、什么也不做什么也不做*/endend 5.5.2 预测翻译器的设计预测翻译器的设计function R(i:syntax_tree_node):syntax_tree_node;var nptr,i1,s1,s:syntax_tree_node;addoplexeme:char;begin if lookahead=+then begin /*产生式产生式 R +T R */addoplexeme:=lexval;match(+);nptr:=T;i1:=mknode(addoplexme,i,nptr);s1:=R(i1);s:=s1endelse s:=i;/*产生式产生式 R */ret

42、urn send;R:i,sT:nptr+:addoplexeme4.3 L属性定义的自上而下计算属性定义的自上而下计算4.3.4 用综合属性代替继承属性用综合属性代替继承属性Pascal的声明,如的声明,如m,n:integerD L:TT integer|charL L,id|id4.3 L属性定义的自上而下计算属性定义的自上而下计算4.3.4 用综合属性代替继承属性用综合属性代替继承属性Pascal的声明,如的声明,如m,n:integerD L:TT integer|charL L,id|id改成从右向左归约改成从右向左归约D id LL ,id L|:TT integer|char4

43、.3 L属性定义的自上而下计算属性定义的自上而下计算4.3.4 用综合属性代替继承属性用综合属性代替继承属性Pascal的声明,的声明,如如m,n:integerD L:TT integer|charL L,id|id改成从右向左归约改成从右向左归约D id LL ,id L|:TT integer|charD:L,idLidintegerT4.3 L属性定义的自上而下计算属性定义的自上而下计算D id L addtype(id.entry,L.type)L ,id L1 L.type:=L1.Type;addtype(id.entry,L1.type)L :T L.type:=T.typeT

44、 integer T.type:=integerT real T.type:=realD:L,idLidintegerT4.4 L属性的自下而上计算属性的自下而上计算 在自下而上分析的框架中实现在自下而上分析的框架中实现L属性定义的方法属性定义的方法 它能实现任何基于它能实现任何基于LL(1)文法的文法的L属性定义。属性定义。也能实现许多(但不是所有的)基于也能实现许多(但不是所有的)基于LR(1)的的L属性定义。属性定义。4.4 L属性的自下而上计算属性的自下而上计算 4.4.1 删除翻译方案中嵌入的动作删除翻译方案中嵌入的动作E T RR +T print(+)R1|T print()R1

45、|T num print(num.val)4.4 L属性的自下而上计算属性的自下而上计算 4.4.1 删除翻译方案中嵌入的动作删除翻译方案中嵌入的动作E T RR +T print(+)R1|T print()R1|T num print(num.val)在文法中加入产生在文法中加入产生 的的标记非终结符标记非终结符,让每个嵌入动,让每个嵌入动作由不同标记非终结符作由不同标记非终结符M代表,并把该动作放在产代表,并把该动作放在产生式生式M 的右端。的右端。4.4 L属性的自下而上计算属性的自下而上计算 4.4.1 删除翻译方案中嵌入的动作删除翻译方案中嵌入的动作E T RR +T print(

46、+)R1|T print()R1|T num print(num.val)在文法中加入产生在文法中加入产生 的的标记非终结符标记非终结符,让每个嵌入动,让每个嵌入动作由不同标记非终结符作由不同标记非终结符M代表,并把该动作放在产代表,并把该动作放在产生式生式M 的右端。的右端。E T RR +T M R1|T N R1|T num print(num.val)M print(+)N print()4.4 L属性的自下而上计算属性的自下而上计算 4.4.2 分析栈上的继承属性分析栈上的继承属性例例 int p,q,r D T L.in:=T.type LT int T.type:=integer

47、T real T.type:=realL L1.in:=L.in L1,id addtype(id.entry,L.in)L id addtype(id.entry,L.in)4.4 L属性的自下而上计算属性的自下而上计算 4.4.2 分析栈上的继承属性分析栈上的继承属性属性位置能预测属性位置能预测例例 int p,q,r D T L.in:=T.type LT int T.type:=integerT real T.type:=realL L1.in:=L.in L1,id addtype(id.entry,L.in)L id addtype(id.entry,L.in)DTLL,rL,qp

48、int type ininin4.4 L属性的自下而上计算属性的自下而上计算 DTLL,rL,qpint type ininin产产 生生 式式 代代 码码 段段D TL T int valtop:=integer T real valtop:=real L L1,id addtype(valtop,valtop 3)L id addtype(valtop,valtop 1)4.4 L属性的自下而上计算属性的自下而上计算 属性的位置不能预测属性的位置不能预测S aACC.i:=A.sS bABCC.i:=A.sC cC.s:=g(C.i)4.4 L属性的自下而上计算属性的自下而上计算 属性的位

49、置不能预测属性的位置不能预测S aACC.i:=A.sS bABCC.i:=A.sC cC.s:=g(C.i)增加标记非终结符增加标记非终结符S aACC.i:=A.sS bABMCM.i:=A.s;C.i:=M.sC cC.s:=g(C.i)M M.s:=M.i4.4 L属性的自下而上计算属性的自下而上计算 4.4.3 模拟继承属性的计算模拟继承属性的计算继承属性是某个综合属性的一个函数继承属性是某个综合属性的一个函数S aACC.i:=f(A.s)C cC.s:=g(C.i)4.4 L属性的自下而上计算属性的自下而上计算 4.4.3 模拟继承属性的计算模拟继承属性的计算继承属性是某个综合属

50、性的一个函数继承属性是某个综合属性的一个函数S aACC.i:=f(A.s)C cC.s:=g(C.i)增加标记非终结符,增加标记非终结符,把把f(A.s)的计算移到对标的计算移到对标记非终结符归约时进行记非终结符归约时进行。S aANCN.i:=A.s;C.i:=N.sN N.s:=f(N.i)C cC.s:=g(C.i)4.4 L属性的自下而上计算属性的自下而上计算例例 数学排版语言数学排版语言EQN S B.ps:=10 BS.ht:=B.ht B B1.ps:=B.ps B1B2.ps:=B.ps B2B.ht:=max(B1.ht,B2.ht)B B1.ps:=B.ps B1sub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(网页制作技巧chapter5语法制导翻译.ppt课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|