网站大量收购独家精品文档,联系QQ:2885784924

编译原理第八章—语法制导翻译.pptVIP

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
L-属性文法和自顶向下翻译 LL(1)这种自上而下分析文法的分析过程,从概念上说可以看成是深度优先建立语法树的过程,因此,我们可以在自上而下语法分析的同时实现L属性文法的计算。 消除左递归: E→E addop T | T T→num 变为 E→TR R→addop T R|ε T→num (消除左递归)2+3-5的语法树 LL(1)分析: E→TR R→addop T R|ε T→num E R T T + 2 T - 3 R R 5 ? 说明语义动作的语法树 E R T Print’+’ + 2 T - 3 R R 5 ? print’2’ T print’3’ print’5’ Print’-’ E→TR R→addop T {print(addop. Lexeme)} R1|ε T→num {print(num.val)} 补充:左递归翻译模式的转换 左递归翻译模式 A→A1Y{A.a:=g(A1.a,Y.y)} A→X {A.a:=f(X.x)} 每一个文法符号都有一个综合属性,用相应的小写字母表示,g和f是任意函数。 消除左递归,文法转换成 A→X R R→Y R|ε 补充:左递归翻译模式的转换 再考虑语义动作,翻译模式变为: 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} 其中,使用R的继承属性i和综合属性s。 翻译模式1和翻译模式2的结果是一样的。 A→A1Y {A.a: = g(A1。a, Y.y)} A→X {A.a: = f(X.x)} A.a=g(g(f(X.x),Y1.y),Y2.y) A.a=g(f(X.x),Y1.y) Y2 A.a=f(X.x) Y1 X A A Y A Y X A→X{R.i: = f(X.x)} R→Y {R1.i: = g((R.i),Y.y)} R {A.a: =R.s} R1{R.s: = R1.s} A→XR R→YR|ε A X R Y1 R Y2 R ? 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) ? L-属性文法 L-属性文法的定义和翻译模式 L-属性文法在自上而下分析中的实现 L-属性文法在自下而上分析中的实现 自下而上的分析中实现L-属性文法 两种方法 从翻译模式中去掉嵌入在产生式中间的动作 用综合属性代替继承属性 一、从翻译模式中去掉嵌入在产生式中间的动作 转换方法:引入新的非终结符N和产生式N→ ε,把嵌入在产生式中间的动作用非终结符N代替,并把这个动作放在产生式后面. 例: E→T R R→ + T {print (‘+’) } R1 R→- T {print (‘-’) } R1 R→ε T→num {print (num.val) } 文法变换后,接受的语言相同. E→T R R→ + T M R1 R→- T N R1 R→ε T→num {print (num.val) } M→ε {print (‘+’) } N→ε {print (‘-’) } 目的:使所有嵌入的动作都出现在产生式的末尾,可以自下而上处理继承属性. 二、用综合属性代替继承属性 有时,改变基础文法可能避免继承属性。例如,一个Pascal的说明由一标识符序列后跟类型组成,如, m, n: integer。这样的说明的文法可由下面形式的产生式构成 D→L:T T→integer|char

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档