第4讲属性文法优秀PPT.ppt
《第4讲属性文法优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第4讲属性文法优秀PPT.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4讲属性文法现在学习的是第1页,共61页1.1.属性文法属性文法 属性文法是在上下文无关文法的基础上为每个文法属性文法是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的符号(终结符或非终结符)配备若干个相关的“值值”(称为(称为属性属性)。这些属性代表与文法符号相关的信息,)。这些属性代表与文法符号相关的信息,例如它的类型、值、代码序列例如它的类型、值、代码序列、符号表内容等等。属性、符号表内容等等。属性和变量一样,可以进行计算和传递。和变量一样,可以进行计算和传递。属性一般分为两类:属性一般分为两类:综合属性:综合属性:用于用于“自下而上自下而上”传递信息,传递信
2、息,继承属性:继承属性:用于用于“自上而下自上而下”传递信息。传递信息。属性加工的过程即是属性加工的过程即是语义处理语义处理的过程,对于文法的每的过程,对于文法的每一个产生式都配备了一组属性的计算规则,称为一个产生式都配备了一组属性的计算规则,称为语义规则语义规则。2现在学习的是第2页,共61页属性的类型 综合属性综合属性:在语法树中,一个结点的综合属性的值由其子结点的在语法树中,一个结点的综合属性的值由其子结点的属性值确定。通常使用属性值确定。通常使用自底向上自底向上的方法在每一个结点处使的方法在每一个结点处使用语义规则计算综合属性的值。仅仅使用综合属性的属性文用语义规则计算综合属性的值。仅
3、仅使用综合属性的属性文法称法称S-S-属性文法。属性文法。继承属性继承属性:在语法树中,一个结点的继承属性由此结点的父结点在语法树中,一个结点的继承属性由此结点的父结点和和/或或兄弟结点的某些属性确定。可用继承属性来表示程序语兄弟结点的某些属性确定。可用继承属性来表示程序语言结构中的上下文依赖关系。言结构中的上下文依赖关系。3现在学习的是第3页,共61页 注意:注意:(1 1)终结符只有综合属性,由词法分析器提供;)终结符只有综合属性,由词法分析器提供;(2 2)非终结符既可以有综合属性也可以有继承属性。文法开)非终结符既可以有综合属性也可以有继承属性。文法开始符号的所有继承属性作为属性计算前
4、的初始值。始符号的所有继承属性作为属性计算前的初始值。出现在产生式右边的继承属性和出现在产生式左边的出现在产生式右边的继承属性和出现在产生式左边的综合属性都必须提供一个计算规则。一般地,属性计综合属性都必须提供一个计算规则。一般地,属性计算规则中只能使用相应产生式的文法符号的属性,这算规则中只能使用相应产生式的文法符号的属性,这有利于产生式范围内有利于产生式范围内“封装封装”属性的依赖性。属性的依赖性。出现在产生式左边的继承属性和出现在产生式右出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给的产生式的属性计算规则进边的综合属性不由所给的产生式的属性计算规则进行计算,它们由其它产生
5、式的属性规则计算或由属行计算,它们由其它产生式的属性规则计算或由属性计算器的参数提供。性计算器的参数提供。4现在学习的是第4页,共61页 在一个属性文法中,对应于每个产生式在一个属性文法中,对应于每个产生式A A都有一都有一套与之相关联的套与之相关联的语义规则语义规则,每条语义规则的形式为:,每条语义规则的形式为:b:=f(c b:=f(c1 1,c,c2 2,c,ck k)其中其中f f是一个函数,并且满足下是一个函数,并且满足下面两种情况之一:面两种情况之一:(1 1)b b是是A A的一个综合属性并且的一个综合属性并且c c1 1,c,c2 2,c,ck k是产生式是产生式右边文法符号的
6、属性;右边文法符号的属性;(2 2)b b是产生式右边某个文法符号的一个继承属性并是产生式右边某个文法符号的一个继承属性并且且c c1 1,c,c2 2,c,ck k是是A A或产生式右边任何文法符号的属性。或产生式右边任何文法符号的属性。对这两种情况都称为属性对这两种情况都称为属性b b依赖于依赖于属性属性c c1 1,c,c2 2,c,ck k5现在学习的是第5页,共61页语义规则语义规则 描述属性计算、静态语义检查、符号表描述属性计算、静态语义检查、符号表操作、代码生成等。语义规则可能产生操作、代码生成等。语义规则可能产生副作副作用用(如产生代码),也可能不是变元的严格(如产生代码),也
7、可能不是变元的严格函数(即函数中还有其它没有列出的自变量函数(即函数中还有其它没有列出的自变量如变量地址等),比如说某个规则可能给出如变量地址等),比如说某个规则可能给出可用的下一个数据单元的地址。这样的语义可用的下一个数据单元的地址。这样的语义规则通常写成过程调用或过程段。规则通常写成过程调用或过程段。6现在学习的是第6页,共61页 下表是一个台式计算器程序的属性文法。该计算器读入一个下表是一个台式计算器程序的属性文法。该计算器读入一个算术表达式,计算并打印它的值,每个输入行以算术表达式,计算并打印它的值,每个输入行以n n作为结束。作为结束。在这些语义规则中,一个整数综合属性在这些语义规则
8、中,一个整数综合属性valval把每个非终结符把每个非终结符E,T,FE,T,F联系起来。记号联系起来。记号digitdigit具有综合属性具有综合属性lexvallexval,其值由词法分析器提供。,其值由词法分析器提供。产生式语义规则LE nPrint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.valF.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval7现在学习的是第7页,共61页LnE.val=19E.val=15T.val=4T.val=15F
9、.val=4T.val=3F.val=5digit.lexval=4F.val=3digit.lexval=5digit.lexval=3+*句子句子3*5+43*5+4n n的带注释的语法树的带注释的语法树这是个带综合属性文法的例子,下面再来看一个继承属性这是个带综合属性文法的例子,下面再来看一个继承属性的例子。的例子。8现在学习的是第8页,共61页产生式语义规则D T LL.in:=T.typeT intT.type:=integerT realT.type:=realL L1,idL1.in:=L.in addtype(id.entry,L.in)L idaddtype(id.entry
10、,L.in)变量声明语句中,通过继承属性把类型信息传递变量声明语句中,通过继承属性把类型信息传递给每个标识符。给每个标识符。问题:给出句子问题:给出句子real a,b,c 的带注释的语法树的带注释的语法树?9现在学习的是第9页,共61页10现在学习的是第10页,共61页2.2.基于属性文法的处理方法基于属性文法的处理方法 对单词符号串进行语法分析,构造语法分析树,然对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树,并在语法树的各结点处按语义后根据需要遍历语法树,并在语法树的各结点处按语义规则进行计算。规则进行计算。输入串输入串语法树语法树依赖图依赖图语义规则计算次序语义规则计
11、算次序 这种由源程序的语法结构所驱动的处理办法就是这种由源程序的语法结构所驱动的处理办法就是语法语法制导翻译制导翻译。语义规则的计算可能语义规则的计算可能产生代码产生代码、在、在符号表符号表中存放信中存放信息、给出息、给出错误信息错误信息或执行任何或执行任何其它动作其它动作。对输入串的翻译对输入串的翻译=根据语义规则进行计算得出结果根据语义规则进行计算得出结果11现在学习的是第11页,共61页依赖图依赖图 语法树中结点属性之间的相互依赖关系用语法树中结点属性之间的相互依赖关系用依赖图依赖图描述描述 为每一个包含过程调用的语义规则引入一个为每一个包含过程调用的语义规则引入一个虚综合属性虚综合属性
12、b b,这样把每一个语义规则都写成,这样把每一个语义规则都写成 b:=f(cb:=f(c1 1,c,c2 2,c ck k)的形式。的形式。依赖图是一个有向图,为每一个属性设置依赖图是一个有向图,为每一个属性设置一个结点:如果属性一个结点:如果属性b b依赖属性依赖属性c c,则从属性,则从属性c c的结点有一条有向边连到属性的结点有一条有向边连到属性b b的结点。的结点。12现在学习的是第12页,共61页依赖图依赖图的画法的画法 例:属性例:属性 A.a:=f(X.x,Y.y)A.a:=f(X.x,Y.y)对应于产生式对应于产生式 A AXY XY 的语义规则。的语义规则。在依赖图中有三个相
13、关结点:在依赖图中有三个相关结点:A.a,X.x,Y.y A.a,X.x,Y.y。由于由于A.aA.a依赖于依赖于X.xX.x,Y.y Y.y,所以有,所以有两条有向边从两条有向边从X.xX.x到到A.aA.a,从,从Y.yY.y连到连到A.a.A.a.如果与产生式如果与产生式A AXYXY对应的语义规则还对应的语义规则还有:有: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,因为因为X.iX.i依赖于依赖于A.aA.a和和Y.y.Y.y.13现在学习的是第1
14、3页,共61页例依赖图当下面的产生式应用于语法树时,我们就像下当下面的产生式应用于语法树时,我们就像下图所示的那样把有向边加到依赖图中。图所示的那样把有向边加到依赖图中。产生式产生式 语义规则语义规则 EE1+E2 E.val:=E1.val+E2.val14现在学习的是第14页,共61页例依赖图因为产生式因为产生式因为产生式因为产生式D D D DTLTLTLTL的语义的语义的语义的语义规则规则规则规则L.in=T.type,L.in=T.type,L.in=T.type,L.in=T.type,从从从从代表代表代表代表T.typeT.typeT.typeT.type的结点的结点的结点的结点
15、4 4 4 4有有有有一条边连到代表一条边连到代表一条边连到代表一条边连到代表L.inL.inL.inL.in的结点的结点的结点的结点5 5 5 5;因为产生式因为产生式因为产生式因为产生式L L L LL1,idL1,idL1,idL1,id有语有语有语有语义规则义规则义规则义规则L1.in=L.in,L1.in=L.in,L1.in=L.in,L1.in=L.in,可可可可知知知知L1.inL1.inL1.inL1.in依赖于依赖于依赖于依赖于L.in,L.in,L.in,L.in,所以有两条向下的边所以有两条向下的边分别进入结点分别进入结点7 7 和和9 9。每一个与每一个与L L产生式
16、有关的语义规则产生式有关的语义规则addtype(id.entry,L.in)addtype(id.entry,L.in)都产生一都产生一个虚属性,结点个虚属性,结点6 6、8 8和和1010都是为这些虚属性构造的。都是为这些虚属性构造的。15现在学习的是第15页,共61页良定义文法和属性的计算次序良定义文法和属性的计算次序 定义:属性之间定义:属性之间不存在循环依赖关系不存在循环依赖关系的属性文法。的属性文法。一个有向非循环图的一个有向非循环图的拓扑序拓扑序是图中结点的任何顺序是图中结点的任何顺序m1,m2,mk,使得边必须是从序列中前面的结点指向后面使得边必须是从序列中前面的结点指向后面的
17、结点。也就是说,如果的结点。也就是说,如果mimj是是mi到到mj的一条边,那的一条边,那么在序列中么在序列中mi必须出现在必须出现在mj之前。之前。一个依赖图的任何拓扑排序都给出一个语法树中结点的一个依赖图的任何拓扑排序都给出一个语法树中结点的语义规则计算的有效顺序。语义规则计算的有效顺序。属性文法说明的翻译是很精确的:基础文法用于构属性文法说明的翻译是很精确的:基础文法用于构造输入符号串的语法分析树,在此基础之上可以建立造输入符号串的语法分析树,在此基础之上可以建立依赖图。按照图的某一种拓扑排序,就可以根据语义依赖图。按照图的某一种拓扑排序,就可以根据语义规则进行翻译。规则进行翻译。16现
18、在学习的是第16页,共61页树遍历的属性计算方法树遍历的属性计算方法 以某种次序遍历语法树,直至计算出所有的以某种次序遍历语法树,直至计算出所有的属性。最常用的遍历方法是属性。最常用的遍历方法是深度优先,从左深度优先,从左到右到右的遍历方法。这种方法最简单,适应面的遍历方法。这种方法最简单,适应面最广。(算法略)最广。(算法略)缺点:缺点:v必须在语法树建立之后才能使用必须在语法树建立之后才能使用v效率不高效率不高对每个非终结符号:对每个非终结符号:多次重复计算所有能够计算的继承属性多次重复计算所有能够计算的继承属性最后计算所有能够计算的综合属性最后计算所有能够计算的综合属性17现在学习的是第
19、17页,共61页一遍扫描的处理方法一遍扫描的处理方法 在语法分析的同时计算属性值,因而无需构造实际的语在语法分析的同时计算属性值,因而无需构造实际的语法树。法树。语法制导翻译法就是为文法中每个产生式配上一组语语法制导翻译法就是为文法中每个产生式配上一组语义规则,并且,在义规则,并且,在语法分析的同时语法分析的同时执行这些语义规则。执行这些语义规则。计算语义规则,完成有关语义分析和代码生成动作的计算语义规则,完成有关语义分析和代码生成动作的时机:时机:自上而下分析中一个产生式匹配输入串成功时;自上而下分析中一个产生式匹配输入串成功时;自下而上分析中一个产生式被用于进行归约时。自下而上分析中一个产
20、生式被用于进行归约时。18现在学习的是第18页,共61页抽象语法树抽象语法树v 在语法分析期间完成翻译工作可大幅提高编译的时空在语法分析期间完成翻译工作可大幅提高编译的时空效率,但也存在一些问题:效率,但也存在一些问题:适合于语法分析的文法可能并不反映语言成分的自然层次结构;适合于语法分析的文法可能并不反映语言成分的自然层次结构;特定的语法分析方法也可能限制了语法分析树的节点考察顺序特定的语法分析方法也可能限制了语法分析树的节点考察顺序v 因此,现代编译器通用的做法是:通过语法分析构造语因此,现代编译器通用的做法是:通过语法分析构造语法树,再对语法树进行遍历完成属性的计算。也就是使用法树,再对
21、语法树进行遍历完成属性的计算。也就是使用中间表示中间表示(Intermediate Representation)(Intermediate Representation)把翻译从语法把翻译从语法分析中分离出来。分析中分离出来。v这样做可以使编译器更好地模块化,也方便了移植和这样做可以使编译器更好地模块化,也方便了移植和优化。优化。19现在学习的是第19页,共61页 为每个运算分量或运为每个运算分量或运算符号都建立一个结点算符号都建立一个结点来为子表达式建立子树。来为子表达式建立子树。运算符号结点的各子结运算符号结点的各子结点分别是表示该运算符点分别是表示该运算符号的各个运算分量的子号的各个运
22、算分量的子表达式组成的子树的根。表达式组成的子树的根。抽象语法树中的每一个结点可以由包含抽象语法树中的每一个结点可以由包含几个域的记录来实现。几个域的记录来实现。在一个运算符号在一个运算符号对应的结点中对应的结点中,一个域标识运算符号一个域标识运算符号,其它其它域包含指向运算分量的结点的指针。域包含指向运算分量的结点的指针。通常,运算符号叫做这个结点的标通常,运算符号叫做这个结点的标号。进行翻译时,抽象语法树中的结号。进行翻译时,抽象语法树中的结点可能会用附加域来存放结点的属性点可能会用附加域来存放结点的属性值值(或指向属性的指针)。或指向属性的指针)。表达式表达式3*5+4的抽象语法树的抽象
23、语法树抽象语法树抽象语法树(AST)(AST):语法分析树的压缩形式。:语法分析树的压缩形式。叶子结点:终结符的综合属性、文法开始符号的继承属性叶子结点:终结符的综合属性、文法开始符号的继承属性以下以表达式为例,说明如何构造以下以表达式为例,说明如何构造ASTAST。20现在学习的是第20页,共61页产生式语义规则EE1+TE.nptr:=mknode(+,E1.nptr+T.nptr)ETE.nptr:=T.nptrTT1*FT.nptr:=mknode(*,T1.nptr+F.nptr)TFT.nptr:=F.nptrF(E)F.nptr:=E.nptrFidF.nptr:=mkleaf(
24、id,id.entry)Fnumber F.nptr:=mkleaf(number,number.val)综合属性综合属性nptr表示函数调用返回的指针。表示函数调用返回的指针。21现在学习的是第21页,共61页a+5*b的语法树的构造的语法树的构造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+F.nptrF.nptridnumididnum 5+指向符号表中指向符号表中a的入口的入口指向符号表中指向符号表中b的入口的入口22现在学习的是第22页,共61页a+5*b的语法树的构造的语法树的构造E.nptrT.nptrE.nptrT.nptrF.nptridT.n
25、ptr+F.nptrF.nptridnumididnum 5+指向符号表中指向符号表中a的入口的入口指向符号表中指向符号表中b的入口的入口23现在学习的是第23页,共61页a+5*b的语法树的构造的语法树的构造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+F.nptrF.nptridnumididnum 5+指向符号表中指向符号表中a的入口的入口指向符号表中指向符号表中b的入口的入口24现在学习的是第24页,共61页a+5*b的语法树的构造的语法树的构造E.nptrT.nptrE.nptrT.nptrF.nptridT.nptr+F.nptrF.nptridnu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 属性 文法 优秀 PPT
限制150内