编译6语法制导翻译技术和中间代码生成素材.ppt

编译6语法制导翻译技术和中间代码生成素材.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例:画出形成表达式a*(b+c/d)的逆波兰表示过程 a *(b+c/d)# # 步骤① a (b+c/d)# * # 步骤② a b+c/d)# ( * # 步骤③ ab +c/d)# ( * # 步骤④ ab c/d)# + ( * # 步骤⑤ abc /d)# + ( * # 步骤⑥ * * abc d)# / + ( * # 步骤⑦ abcd )# / + ( * # 步骤⑧ / + ( * # abcd/ )# 步骤⑨ + ( * # abcd/+ )# 步骤⑩ * # abcd/+* # 步骤 ⑾ * * 形成逆波兰表示的过程,实质上是表达式的翻译过程。(算法不难写出) 例:a/b/c+d = ab/c/d+ (a+b)*(c-d/e) = ab+cde/-* * * 6.4.2 三元式和树形表示 1. 三元式 一个三元式由三个主要部分和一个序号组成: (i)(op,arg1,arg2) 其中:op是运算符,arg1和arg2是运算对象。当op为一目运算符时,只有一个运算对象。 (i)表示三元式的序号,三元式的运算结果由每个三元式前序号(i)指示。序号(i)指向三元式所处的表格位置,因此引用一个三元式的计算结果是通过引用该三元式的序号实现的。三元式出现的先后顺序与表达式的计值顺序一致。 * * 例:a=A+(-B)*C 的三元式: (1)(@,B,-) (2)(*,(1),C) (3)(+,A,(2)) * * 2. 间接三元式 由于三元式的先后顺序决定了值的顺序,因此在产生三元式形式的中间代码后,对其进行代码的优化时难免涉及到改变三元式的顺序,这就要修改三元式表。 为了最少改动三元式表,可以另设一张间接码表来表示有关三元式在三元式表的计值顺序,用这种办法处理的中间代码称为间接三元式。 例:表达式 x=A+B*C y=D-B*C * * 其间接三元式表示如下: 三元式表 间接码表 (1) (*,B,C) (1) (2) (+,A,)(1)) (2) (3) (=,x,(2)) (3) (4) (-,D,(1)) (1) (5) (=,y,(4)) (4) (5) 由于间接码表的作用,编译程序每产生一个三元式时,先查看三元式表中是否存在当前三元式,若存在就不需要重复填写三元式表,如上例中的三元式(1) (*,B,C)在间接码表中出现了两次,但三元式表中实际只有一个三元式。 注:间接三元式表示的中间代码有利于中间代码的优化。 * * 3.树形表示 树形结构是三元式的另一种表示形式 例如:a=-b*c+b*d的树形表示(由三元式的下至上画出) * * 一个表达式中简单变量或常数的树形表示就是它们的本身。 如果表达式e1和e2的树分别为T1和T2,则: e1+e2, e1* e2, -e1 的树分别: 树形表示法很容易表示一个表达式或语句。 * * 注:二目运算对应二叉树 三目运算对应三叉树: 如条件语句if u then S1 else S2 可看作三目运算。 其三目运算符¥定义为:if then else 则树表示: 注:多叉树不便于存储,可以化为二叉树: ¥ * * 四、四元式和三地址代码 四元式是一种比较普遍采用的中间代码形式。 四元式由四个部分组成: (i) (op, arg1, arg2, result) 其中:op为运算符;arg1,arg2为运算对象。result存放结果的变量。四元式之间的联系通过变量来联系(而不是三元式中的序号联系) 例:a=b*c+b/d 的四元式表示: (1) (*, b, c, t1) (2) (/, b, d, t2) (3) (+, t1, t2, t3) (4) (=, t3, _, a) * * 注:四元式和三元式的主要不同在于: 四元式之间的联系通过中间引用的变量名实现,而三元式之间的联系通过三元式序号实现。 这说明要更改一张三元式表比较困难,它需要改变一系列的三元式的序号。四元式表的修改比较方便,调整四元式之间位置,不改变其中的参数。 因此:四元式和三地址代码表示的中间代码便于中间代码的优化。而三元式和树不便于优化。 * * 有时将四元式表示成更直观的形式:三地址代码 三地址代码形式: x = a op b (赋值形式) 与赋值语句的区别:其右边最多只能有一个运算符。 例:上例的四元式写成三地址代码: (1) t1=b*c (2) t2=b/d

文档评论(0)

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

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

1亿VIP精品文档

相关文档