- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
属性文法的一些基本概念
基于属性文法的几种处理方法
S-属性文法的自上而下计算
L-属性文法和自顶向下翻译
自下而上计算继承属性
第六章 属性文法和语法制导翻译
一.属性文法
1.属性(Attribute):
一个文法符号X∈(VN∪VT)的语义性质称为该文法符号的语义属性,用以代表与文法的相关信息,简称属性。
⑶同一文法符号可以有多个属性。
⑴属性的典型例子:
变量的数据类型;
表达式的值;
存储器中变量的位置;
程序的目标代码;
数的有效位数;
等。
⑵用记号X.a表示与文法符号X相关的属性a。
(1)语义规则
对于文法的每个产生式所配备的一组属性的计算规则,叫做语义规则。
2.属性文法
属性文法是对上下文无关文法的扩充:是把上下无关语言同上下文相关的语言语义信息相结合的形式定义。因而是语义分析形式定义的有效手段,即使代码优化与目标代码生成也可以用属性文法来形式化地描述。
(2)属性文法(Attribute Grammar)
对于某个上下无关文法,当把每个文法符号联系于一组属性,且让该文法中的产生式附以语义规则时,称该上下文无关文法为属性文法。 又称语法制导定义,Syntax-Directed Definition。
也就是说,属性文法是一个上下文无关文法和属性及属性计算规则的结合。属性和文法符号相关联,而属性计算规则和产生式相关联。
L是文法的识别符号,n表示行结束符, 产生式LEn的语义规则是一个过程,表示打印E的属性值val。可以认为这条规则定义了L的一个虚属性。
语义规则部分明确地规定了各属性值是如何计算的。
例:简单算术表达式求值的属性文法
①对非终结符E、T、F各引进一个整型属性值val;
②对终结符digit引进整型属性值lexval,由词法分析程序提供;
产生式 语义规则
DTL L.in=T.type
Tint T.type=integer
Treal T.type=real
LL1,id L1.in=L.in
addtype(id, entry, L.in)
Lid addtype(id,entry, L.in)
过程addtype的功能是把标识符的类型添加到符号表中的相应条目中。该条目位置由entry指定
该文法定义的是一种说明语句,该说明语句的形式是由关键字int或real开头,后跟一个标识符表,每个标识符间用逗号隔开。
给终结符T引入一个type属性,它的值由说明中的关键字确定;
给L引入一个in属性,它的值由T.type或前一个L.in确定;
例:简单说明语句的属性文法
各结点上标记有相应属性值的语法分析树称带注释的语法分析树;计算各结点的属性值的过程称为对语法分析树进行注释。
Ⅰ.综合属性
一个结点对应文法符号属性值通过语法分析树中它的子结点的属性值来计算,按这种情况计算的属性值叫做综合属性。
例:上面例1,输入:3*5+4n 时的带注释的语法树如下:其中的所有属性均为综合属性。
也就是说,语法制导翻译的方法是先构造一棵语法分析树,然后通过访问这棵树的各个结点来计算结点的属性值。
(4)综合属性与继承属性
(3)带注释的语法树
*
digit
F
T
digit
F
T
E
+
digit
F
T
E
L
n
Fdigit
F.Val=digit.lexVal
LEn
print(E.Val)
EE1+T
E.Val=E1.Val+T.Val
E T
E.Val=T.Val
T T1*F
T.Val=T1.Val+F.Val
TF
T.Val=F.Val
F(E)
F.Val=E.Val
lexval:=3
val:=3
val:=3
lexval:=5
val:=5
val:=15
val:=15
lexval:=4
val:=4
val:=4
val:=19
输入串:3*5+4n
对语法分析树的后序遍历来计算属性值。当遍历最后一次离开某结点N的时候计算出该结点N的属性值。
Ⅱ.继承属性
一个结点相应的文法符号属性值是由该结点兄弟结点和/或父结点的相应的文法符号的属性值来计算,按这种情况计算的属性值叫做继承属性。
上面例2中,输入为real id1,id2,id3
产生式
语义规则
DTL
L.in=T.type
Tint
T.type=integer
Treal
T.type=real
LL1,id
L1.in=L.in addtype(id,entry, L.in)
Lid
addtype(id,entry, L.in)
T有一个属性type,它是声明D中的类型。非终结符L也有一个属性in,它的作用是将声明的类型沿着标识符列表向
文档评论(0)