编译原理第六章习题答案.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理第六章习题答案

* 2)翻译模式的构造 条件:属性文法是L-属性文法; 保证语义动作不会引用还没有计算的属性值。 a. 只需要综合属性的情况: 为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。 例如: T→T1*F T?val = T1 ?val*F ?val T→T1*F { T?val = T1 ?val*F ?val} b. 既有综合属性又有继承属性: 产生式右边符号的继承属性必须在这个符号以前的动作中计算出来。 一个动作不能引用这个动作右边符号的综合属性。( 因为综合属性是在该符号所有分析动作结束后计算) 产生式左边非终结符的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的末尾。 * 4.3 自顶向下的翻译 用翻译模式构造自顶向下翻译。 从翻译模式中消除左递归 对于一个翻译模式,若采用自顶向下分析,必须消除左递归和提取公共左因子,在改写基本文法时考虑属性值的计算。 例 图6.13的带左递归的文法的翻译模式被转换成图6.14的带右递归的文法的翻译模式。 E?E1+T {E ? val:=E1?val+T ? val} E ? E1-T {E ? val:=E1 ? val-T ?val} E ? T {E.val:=T ? val} T ? (E) {T ? val:=E ?val} T ? num {T ? val:=num ?val} 图6.13 带左递归的文法的翻译模式 * E→T {R.i:=T.val} R{E.val:=R.s} R→+ T {R1.i:=R.i+T.val} R1{R.s:=R1.s} R→- T {R1.i:=R.i-T.val} R1{R.s:=R1.s} R→ε{R.s:=R.i} T→( E ){T.val:=E.val} T→num {T.val:=num.val} 图6.14经过转换的带有右递归文法的翻译模式 R.s=R.i E T.val=9 num.val=9 R.i=9 - T.val=5 num.val=5 R.i=4 + T.val=2 num.val=2 R.i=6 ε R.s=R1.s R.s=R1.s E.val=R.s 计算表达式9-5+2 * 关于左递归翻译模式更一般化的讨论 左递归翻译模式 A→A1Y{A.a:=g(A1.a,Y.y)} A→X {A.a:=f(X.x)} (6.2) 每一个文法符号都有一个综合属性,用相应的小写字母表示,g和f是任意函数。 消除左递归,文法转换成 A→X R R→Y R|ε (6.3) 再考虑语义动作,翻译模式变为: A→X {R.i := f(X.x)} R {A.a := R.s} R→Y {R1.i := g(R.i,Y.y)} R1 {R.s := R1.s} R→ε {R.s := R.i} (6.4) 经过转换的翻译模式与图6.14中一样,使用R的继承属性i和综合属性s。(6.2)和(6.4)的结果是一样的 * A.a=g(g(f(X.x),Y1.y),Y2.y) Y2 A.a=g(f(X.x),Y1.y) A.a=f(X.x) Y1 X A X R.i=f(X.x) Y1 R.i=g(f(X.x),Y1.y) Y2 R.i=g(g(f(X.x),Y1.y),Y2.y) 输入:XY1Y2 ε A→A1Y{A.a:=g(A1.a,Y.y)} A→X {A.a:=f(X.x)} (6.2) A→X {R?i

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档