语法制导的翻译-III.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中国科大 4.3 L属性定义的自上而下计算 S属性定义的计算 边分析边计算 分析完毕,属性也计算完毕 问题: 继承属性是否可以采用边分析边计算的方式进行? 4.3 L属性定义的自上而下计算 属性计算与分析方法之间的关系 属性的计算次序受分析方法所限定的分析树结点建立次序的限制。 分析树的结点是自左向右生成。 所以,仅当属性信息是自左向右流动时,才有可能在分析的同时完成属性计算。 4.3 L属性定义的自上而下计算 L属性定义 翻译方案 预测翻译器的设计 用综合属性代替继承属性 4.3 L属性定义的自上而下计算 4.3.1 L属性定义 如果每个产生式A ?X1 X2 … Xn 的每条语义规则计算的属性是A的综合属性;或者是Xj 的继承属性,1 ? j ? n, 但它仅依赖: 该产生式中Xj左边符号X1, X2, …, Xj-1的属性; A的继承属性。 S属性定义属于L属性定义。 例 非L属性 文法符号Q的继承属性依赖于它右边文法符号R的属性。 另一例 非L属性的语法制导定义 4.3 L属性定义的自上而下计算 L属性定义的例子:变量类型声明的语法制导定义 4.3 L属性定义的自上而下计算 对于L属性定义,与S属性的一个最本质区别在于 S属性定义中,只要将产生式作为一个整体看待即可,语义规则可以视为是附着在整个产生式上 L属性定义则不一样,它跟属性所属的符号在产生式中的位置有关系 为了对L属性定义进行翻译,必须提一下一个概念 翻译方案 4.3 L属性定义的自上而下计算 L属性定义 翻译方案 预测翻译器的设计 用综合属性代替继承属性 4.3.2 翻译方案 翻译方案: 给出了使用语义规则进行计算的次序,这样就可把某些实现细节表示出来。 在翻译方案中,和文法符号相关语义动作,用花括号{ }括起来,插入到产生式右部的合适位置上。 这是一种动作和分析交错的方法,以表示动作的执行时机。 4.3 L属性定义的自上而下计算 4.3.2 翻译方案 语义动作(语义规则)插入到产生式右部的任何地方,以表达动作的执行时刻。 A?B{..}C 4.3 L属性定义的自上而下计算 4.3.2 翻译方案 例 把有加和减的中缀表达式翻译成后缀表达式 如果输入是8+5 ?2,则输出是8 5 + 2 ?。 E ? T R R ? addop T {print (addop.lexeme)} R1 | ? T ? num {print (num.val)} E ? T R ? num {print (8)} R ? num{print (8)} addop T{print (+)}R ? num{print(8)} addop num{print(5)}{print (+)}R … {print(8)}{print(5)}{print(+)} addop T{print(?)} R … {print(8)}{print(5)}{print(+)}{print(2)}{print(?)} 翻译模式示例:把带加号和减号的中缀表达式翻译成相应的后缀表达式 E→TR R→addop T {print(addop.lexeme)} R1 | ? T→num {print(num.val)} 例:8+5-2 建立翻译模式 当只需要综合属性时:为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。 产生式 语义规则 T→T1*F T.val:=T1.val×F.val 建立产生式和语义动作: T→T1*F {T.val:=T1.val×F.val} 建立翻译模式 如果既有综合属性又有继承属性,在建立翻译模式时就必须保证: 1. 产生式右边的符号的继承属性必须在先于这个符号的动作中计算出来。 2. 一个动作不能引用这个动作右边的符号的综合属性。 3. 产生式左边非终结符的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的末尾。 4.3 L属性定义的自上而下计算 例 数学排版语言EQN E sub 1 .val S ? B B ? B1 B2 B ? B1 sub B2 B ? text 4.3 L属性定义的自上而下计算 例 数学排版语言EQN E sub 1 .val 4.3 L属性定义的自上而下计算 例 数学排版语言EQN S ? {B.ps := 10 } B {S.ht := B.ht } ?B ? {B1.ps := B.ps } B1 {

文档评论(0)

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

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

1亿VIP精品文档

相关文档