资源描述:
《程序设计语言编译原理(第三版)第6章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章 属性文法和语法制导翻译6.1属性文法6.2基于属性文法的处理方法6.3S—属性文法的自下而上计算6.4L—属性文法和自顶向下翻译6.5自下而上计算继承属性16.1属性文法一、基本概念1.属性广义:用以描述事物或人的特征、性质、品质等等。狭义:代表与文法符号相关的信息,其信息值即为属性值。例如:其类型、值、代码序列、符号表内容等。2(1)属性与变量一样,可以进行计算和传递。6.1属性文法(2)属性加工的过程即是语义处理的过程。(3)属性综合属性:继承属性:用于“自上而下”传递信息。用于“自下而上”传递信息。注:32.语义规则为文法的每一个产生式配备的计
2、算属性的计算规则,称为语义规则。3.属性文法在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)引进一组属性,且让该文法中的重写规则附加上语义规则时,称该上下文无关文法为属性文法。注:属性文法往往以语法制导翻译和翻译方案两种形式出现。6.1属性文法4补充:语法制导定义:基于上下文无关文法,是关于语言翻译的抽象规格说明,其中除去了一些实现细节,不规定翻译顺序。翻译模式:规定实现途径和细节,指明使用语义规则进行计算的顺序。6.1属性文法5二、基本规则1.语义规则的形式:产生式Aα的语义规则的形式为b:=f(c1,c2,…,ck)其中:(1)f是一个函数
3、;⇒属性b依赖于属性c1,c2,…,ck(2)或者b—A的综合属性,且c1,c2,…,ck是α中文法符号的属性;6.1属性文法(3)或者b—α中某个文法符号的继承属性,且c1,c2,…,ck是A或α中任何文法符号的属性.62.VT—VN的属性(1)VT—只有综合属性,由词法分析器提供.6.1属性文法(2)VN—既可有综合属性也可有继承属性;开始符号S的所有继承属性作为属性计算前的初始值.73.属性的计算/获得(1)产生式右边的继承属性产生式左边的综合属性(2)产生式左边的继承属性产生式右边的综合属性由该产生式提供的计算规则计算获得由其它产生式的属性规则计算或
4、由属性计算器的参数提供6.1属性文法8例6.1:考虑非终结符A,B和C,其中,A有一个继承属性a和一个综合属性b,B有综合属性c,C有继承属性d。C.d:=B.c+1产生式ABC可能有规则:属性A.a和B.c在其它地方计算。A.a—左部继承属性A.b—左部综合属性B.c—右部综合属性C.d—右部继承属性6.1属性文法9例6.2:一个简单台式计算器的属性文法产生式语义规则LEnEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.va
5、lT.val:=F.valF.val:=E.valF.val:=digit.lexval6.1属性文法10三、综合属性1.语法树中,一个结点的综合属性的值由其子结点的属性值确定;2.通常使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值.S—属性文法:仅使用综合属性的属性文法.6.1属性文法11例6.3:例6.2的表中定义的属性文法说明了一个台式计算器,该计算器读入一个可含数字、括号和+、*运算符的算术表达式,并打印表达式的值,每个输入行以n作为结束。假设表达式为3*5+4,后跟一个换行符n。程序打印数值19其带注释的语法树6.1属性文法12LE.
6、val=19nE.val=15+T.val=4T.val=15T.val=3*F.val=5F.val=3digit.lexval=3digit.lexval=5digit.lexval=5F.val=4返回3*5+4n的带注释的语法树13四、继承属性1.语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定;2.用继承属性来表示程序设计语言结构中的上下文依赖关系很方便.6.1属性文法14例6.4:带继承属性L.in的属性文法产生式语义规则DTLTintTrealLL1,idLidaddtype(id.entry,L.in)T.t
7、ype:=integerT.type:=realL1.in:=L.inL.in:=T.typeaddtype(id.entry,L.in)6.1属性文法15输入串:realid1,id2,id3的带注释的语法树DT.type=realL.in=realrealL.in=realL.in=real,id2id3,id116基于属性文法的处理过程:单词符号串语法分析语法分析树遍历计算例:输入串语法树依赖图语义规则的计算次序进行语义规则计算,得到翻译结果6.2基于属性文法的处理方法17语法制导翻译法语义规则的计算将有下列作用:产生代码,在符号表中存放信息,给出错误
8、信息或执行其它动作。由源程序的语法结构所驱动的处理方