编译原理 第17讲(第八章)(精品·公开课件).pptVIP

编译原理 第17讲(第八章)(精品·公开课件).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 语义分析 8.2.3 S-属性文法的语法制导翻译 LR分析器模型(增加语义栈) 语法制导翻译的例子(1) 2+3*5的分析和计值过程 语法制导翻译的例子(2) 8.2.4 L-属性文法的语法制导翻译 L-属性文法的自顶向下翻译 例:中缀表达式翻译成相应的后缀表达式 说明语义动作的9-5+2语法树 说明语义动作的9-5+2语法树(消除左递归) 带左递归的文法的翻译模式 消除左递归的同时考虑属性要构造新的翻译模式 计算表达式9-5+2 转换左递归翻译模式的方法推广到一般 根据翻译模式1自下而上计算属性的语法树 A A Y A Y X 根据翻译模式2自上而下计算属性的语法树 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) ? 翻译模式(Translation schemes) 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 (‘-’) } 目的:使所有嵌入的动作都出现在产生式的末尾,可以自下而上处理继承属性. 分析栈中的继承属性 标识符的类型通过继承属性的复写规则来传递 回顾例2 Real id1,id2,id3分析树的依赖图 例2输入串real Real id1,id2,id3的分析过程当L的右部被归约时,T恰好在这个右部的下面 扩充分析栈Val[i]存放文法符号X的综合属性X.s 用综合属性代替继承属性 一个解决的方法是重新构造文法 8.3 中间代码的形式 中间代码: 是源程序的一种内部表示 复杂性介于源语言和目标机语言之间 中间代码的作用: 使编译程序的逻辑结构更加简单明确 利于进行与目标机无关的优化 利于在不同目标机上实现同一种语言 中间代码的形式: 逆波兰式、四元式、三元式、间接三元式、抽象语法树和DAG 中间代码的层次 中间代码按照其与高级语言和机器语言的接近程度,可以分成以下三个层次: 高级:最接近高级语言,保留了大部分源语言的结构。 中级:介于二者之间,与源语言和机器语言都有一定差异。 低级:最接近机器语言,能够反映目标机的系统结构,因而经常依赖于目标机。 不同层次的中间代码 逆波兰式(后缀式) 逆波兰记号的扩充用途 三元式 四元式 格式: (算符, 第一运算对象, 第二运算对象, 结果) 优点: 类似于三地址指令(汇编语言,机器指令) 利于优化和代码生成 四元式的直观表示 例:a=b*c+b*d (*, b, c, t1) t1:=b*c (*, b, d, t2) t2:=b*d (+, t1, t2, t3) t3:=t1+t2 (+, t3, _, a) a:=t3 把(jump,-,-,L) 写成 goto L 把(jrop,B,C,L) 写成 if B rop C goto L (以后经常有这样的四元式,一定要和高级语言的代码区分开来。) 抽象语法树 语法树可以作为一种合适的中间语言形式。在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(Abstract Syntax Tree)。 在抽象语法树中,操作符和关键字都不作为叶结点出现,而是把它们作为内部结点,即这些叶结点的父结点 如产生式S→if B then S1 else S2抽象语法树表示 if-then-else B

文档评论(0)

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

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

1亿VIP精品文档

相关文档