属性文法和语法制导翻译课件.ppt

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

文档评论(0)

197918 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档