资源描述:
《编译原理6-1-属性文法课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章属性文法和语法制导翻译6.1属性文法6.2基于属性文法的处理方法6.3S-属性文法的自下而上计算6.4L-属性文法和自顶向下翻译6.5自下而上计算继承属性语义分析静态语义分析类型检查、控制流检查、一致性检查名字的作用域分析动态语义分析栈溢出数组越界a[i]编译中的语义处理静态语义分析或静态审查执行真正的翻译翻译成中间表示形式翻译成目标代码语义形式形式化词法分析-正规式,正规文法,有穷自动机语法分析-上下文无关文法语义分析-难于形式化描述属性文法6.1属性文法属性文法(属性翻译文法)是在上下文无关文法
2、的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称为属性)。属性:类型、值、代码序列、符号表内容…产生式语义规则LEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.val*F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval表6.1一个简单台式计算器的属性文法属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过
3、程。属性的计算规则L的虚属性换行符属性通常分为两类综合属性用于“自下而上”传递信息继承属性用于“自上而下”传递信息或者在兄弟之间传递信息语义规则的形式在一个属性文法中,对应于每个产生式A→α都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2,…,ck)属性b依赖于属性c1,c2,…,ck(1)或者b是A的一个综合属性,并且c1,c2,…,ck是产生式右边文法符号的属性;(2)或者b是产生式右边某个文法符号的一个继承属性,并且c1,c2,…,ck是A或产生式右边任何文法符号的属性。注意终结符
4、只有综合属性,它们由词法分析器提供非终结符既可有综合属性也可有继承属性例:产生式A→BC有规则C.d:=B.c+1A.b:=A.a+B.c继承属性综合属性ABCS-属性文法仅仅使用综合属性的属性文法称S-属性文法在语法树中,一个结点的综合属性的值由其子结点的属性值确定。通常使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值。☆表6.1一个简单台式计算器的属性文法8+5*2nLEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*F
5、T.val:=T1.val*F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexvaldigitLEnTETFdigitT+*FFdigit.lexval=8.val=8带注释的语法树(结点带有语义信息).val=8.val=8.val=18.lexval=5.val=5.val=5.val=10.lexval=2.val=2继承属性在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。用继承属性来表示程序设计语言结
6、构中的上下文依赖关系很方便。产生式DTLTintTrealLL1,idLid表6.2带继承属性L.in的属性文法语义规则L.in:=T.typeT.type:=integerT.type:=realL1.in:=L.in;addtype(id.entry,L.in)addtype(id.entry,L.in)realid1,id2,id3的带注释的语法树图6.2在每个L结点都带有继承属性的语法树DTLL.in:=T.typeTintT.type:=integerTrealT.type:=r
7、ealLL1,idL1.in:=L.in;addtype(id.entry,L.in)Lidaddtype(id.entry,L.in)DrealT,id3LLLid2id1,.type=real.in=real.in=real.in=real继承属性综合属性终结符只有综合属性语义规则属性计算类型说明符号表操作代码生成……补充例1为文法S(L)
8、aLL,S
9、S写一个语义规则,输出括号的对数。SSprint(S.num)S(L)S.num:=L.num+1SaS.num:=0LL1,SL.
10、num:=L1.num+S.numLSL.num:=S.num为下面文法配备语义规则,使得语义处理结果是将中缀表达式变为后缀表达式如:输入是3+4*5输出是345*+补充例2G:EE+T
11、TTT*F
12、FF(E)
13、iEE+T{print‘+’}ETTT*F{print‘*’}TFF(E)Fi{print‘i’}F345EET+*T3F345+*3TFF*ETF345+TFF345ETETF345+*TFF3+