part6属性文法和语法制导翻译.pptx

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
属性文法和语法制导翻译授课:胡静属性文法属性文法虽然形式语义学的研究已经取得了许多重大进展,但目前在实际应用中比较流行的语义描述和语义处理的方法主要还是属性文法和语法制导翻译。本章研究内容:上下文无关文法所产生的语言的翻译。把属性附加到代表语法结构的文法符号上,可以将语义信息和程序设计语言的结构联系起来。属性的值是用与文法产生式相关联的“语义规则”来计算的。涉及的概念语法制导定义:关于语言翻译的高层次规格说明,隐蔽了具体实现细节,不显式的说明翻译发生的顺序(属性文法)翻译模式:指明了语义规则的计算顺序,说明实现细节。语法制导翻译在编译器中的位置语义规则的计算完成的工作生成代码在符号表中保存信息发出错误信息对输入符号串翻译的过程就是对语义规则求值的过程L-属性:包含了所有不必显式构造分析树即可完成的翻译语义规格的计算顺序输入符号串分析树依赖图属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或非终结符)配备若干相关的“值”。属性代表与文法符号相关的信息,如类型、值、代码序列、符号表内容属性可以代表任何对象:字符串,数组,类型,内存单元或其他对象语法制导定义=文法+符号的相关属性集属性分为两个子集:综合属性、继承属性如果把文法符号的结点看成记录,包含若干存储信息的域,那么属性就相当于域的名字属性文法分析树节点上属性值由产生式的语义规则来定义综合属性值:通过分析树中其子节点的属性值计算出来的继承属性值:由该节点的兄弟节点及父节点的属性值计算出来的依赖图语义规则建立了属性间的依赖关系,这种关系用图来表示就是依赖图依赖图表示了语义规则的计算顺序注释分析数每个节点都有属性值的分析树叫做注释分析树计算节点属性的过程称为注释或者装饰分析树属性文法在语法制导定义中,每个产生式A→α都有一个形如b=f(c1,c2,...,ck)的语义规则集合与之相关联,其中f是函数,并且满足下面条件之一b是A的一个综合属性,且c1,c2,...,ck是该产生式文法符号的属性b是产生式右部某个文法符号的一个继承属性,且c1,c2,...,ck也是该产生式文法符号的属性在这两种情况下,我们说属性b依赖于c1,c2,...,ck 。特别要强调的是:终结符只有综合属性,它们由词法分析器提供;非终结符既可有综合属性也可有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值。关于属性文法的说明通常,这种函数的被写为表达式。其他的语义规则被写为过程调用或者程序段——定义产生式左部非终结符的虚综合属性值一般说来,对于出现在产生式右边的继承属性和出现在产生式左边的综合属性都必须提供一个计算规则。属性计算规则中只能使用相应产生式中的文法符号的属性,这有助于在产生式范围内“封装”属性的依赖性。出现在产生式左边的继承属性和出现在产生式右部的综合属性不由所给产生式的属性计算规则进行计算,它们由其他产生式的属性规则计算或由属性计算器的参数提供。继承属性和综合属性的计算举例对于产生式A→BC来讲直观上来讲,这个产生式可以计算A的综合属性、B和C的继承属性。那么对于A的继承属性,可能需要根据某个类似于X→…A…的产生式求的。同样的B和C的综合属性可能需要根据某个类似于B→β,以及C →γ的产生式求的。属性文法举例产生式语义规则L→Enprint(E.val)E→E1 + TE.val := E1.val + T.valE→TE.val := T.valT→T1 * FT.val := T1.val * F.val T→FT.val := F.valF→(E)F.val := E.valF→digitF.val := digit.lexval综合属性S属性定义在语法树中,一个结点的综合属性的值由其子结点的属性值决定。仅使用综合属性的属性文法称为S-属性定义S属性定义的分析树的分析方法——自底向上的在每个节点用语义规则来计算综合属性值。综合属性举例产生式语义规则L→Enprint(E.val)E→E1 + TE.val := E1.val + T.valE→TE.val := T.valT→T1 * FT.val := T1.val * F.val T→FT.val := F.valF→(E)F.val := E.valF→digitF.val := digit.lexvalLnE.val=19E.val=15+T.val=4T.val=15F.val=43*5+4FT*.val=3.val=5digit.val=4F.val=3digit.val=5digit.lexval=3继承属性在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。继承属性在程序设计语言中的作用表示程序设计语言上下文结构的依赖性对于赋值号,其左边和右边的标识符在操作的时候需要提供的属性不

文档评论(0)

159****9610 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档