欢迎来到天天文库
浏览记录
ID:58715979
大小:1.03 MB
页数:105页
时间:2020-10-04
《第06章 编译原理――属性文法和语法制导翻译ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理第六章1虽然形式语义学(如指称语义学、公理语义学、操作语义学等)的研究已取得了许多重大的进展,但目前在实际应用中比较流行的语义描述和语义处理的方法主要还是属性文法和语法制导翻译方法。2一、属性文法的基本概念§6.1属性文法1.属性文法属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。变量的数据类型表达式的值存储器中变量的位置程序的目标代码数的有效位数3随着编译的进展,对语法分析产生的语法树进行语义分析,且分析的结果用中间代码描述出来。对于一棵等待翻译的语法树,它的各个结点都是文法中的一个符号X,该X可以是终结符或非终结符。判断变量X的类型是否
2、匹配,要用X的数据类型来描述;判断变量X是否存在,要用X的存储位置来描述;对X的运算,则要用X的值来描述;因此,语义分析阶段引入X的属性,如X.type、X.place、X.val等来分别描述变量X的类型、存储位置以及值等不同的特征。4属性与变量一样,可计算和传递。属性加工的过程即是语义处理的过程。对文法的每个产生式都配备了一组属性的计算规则——语义规则。属性文法,在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”(称属性),代表与文法符号相关的信息。52.属性分类:综合属性(自下而上传递信息)和继承属性(自上而下传递信息)3.语义规则在一个属性文法
3、中,对应于每个产生式A都有一套与之相关联的语义规则,每条规则的形式为b:=f(c1,c2,…,ck)6这里,f是一个函数,而且或者或者b是A的一个综合属性,并且c1,c2,…,ck是产生式右边文法符号的属性;b是产生式右边某个文法符号的一个继承属性并且c1,c2,…,ck是A或产生式右边任何文法符号的属性。称属性b依赖于属性c1,c2,…,ck7说明终结符只有综合属性,由词法分析器提供非终结符既可有综合属性也可有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值对出现在产生式右边的继承属性和出现在产生式左边的综合属性都必须提供一个计算规则。属性计算规则中只能使
4、用相应产生式中的文法符号的属性出现在产生式左边的继承属性和出现在产生式右边的综合属性不由所给的产生式的属性计算规则进行计算,它们由其它产生式的属性规则计算或者由属性计算器的参数提供8语义规则所描述的工作可以包括属性计算、静态语义检查、符号表操作、代码生成等等。例,考虑非终结符A,B和C,其中,A有一个继承属性a和一个综合属性b,B有综合属性c,C有继承属性d。产生式A→BC可能有规则C.d:=B.c+1A.b:=A.a+B.c而属性A.a和B.c在其它地方计算9例6.1:考虑表6.1中所写的一个属性文法,用作台式计算器程序,每个非终结符E、T及F都有一个综合属性val,符号dig
5、it有一个综合属性lexval,其值由词法分析器提供。10表6.1一个简单台式计算器的属性文法产生式语义规则LEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1FT.val:=T1.valF.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval11二、综合属性综合属性在语法树中,一个结点的综合属性的值由其子结点的属性值确定。使用自底向上的方法在每一个结点处使用语义规则计算综合属性的值仅仅使用综合属性的属性文法称S-属性文法12产生式L→En
6、E→E1+TE→TT→T1*FT→FF→(E)F→digit语义规则print(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval例:对表6.1定义的属性文法,输入表达式35+4,后跟一个回车符,计算结果为根的第一个子结点E.val的值,即19。133*5+4n的带注释的语法树digit.lexval=3F.val=3T.val=3*digit.lexval=5F.val=5T.val=15E.val=15+digit.lexval
7、=4F.val=4T.val=4E.val=19nL产生式语义规则L→Enprint(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.lexval14◆综合属性值的计算方法对于s-属性定义通常使用自底向上的分析方法在建立每一个结点处综合属性值使用语义规则来计算即在用哪个产生式进行归约后
此文档下载收益归作者所有