中国地质大学(武汉)《编译原理》课件-第8章语法制导翻译和中间代码生成.pptVIP

中国地质大学(武汉)《编译原理》课件-第8章语法制导翻译和中间代码生成.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文档。上传文档
查看更多
大学,本科,专科,硕士,笔记,课件,期中试卷答案,期末试卷答案,教材答案,知识点,经济法,材料科学基础,材料力学,电路,电子技术基础,高频电子线路,宏观经济学,模拟电路基础,模拟电子技术,数字电路,数字电子技术,数字信号处理,通信原理,信号与系统,化工原理,机械设计基础,机械原理,机械制图,微机原理与接口技术,C++程序设计,JAVA技术与应用,MATLAB基础与应用,计算机网络,计算机组成原理,软件工程数据结构,工程力学,工程热力学,结构力学,力学,流体力学,水力学,工程测量,工程经济学,工程

(4) S →begin L end {S.chain:= L.chain} (5)?? S →A {S.chain:= 0 /*空链*/} L →S {L.chain:=S.chain} (12) Ls →L; {backpatch( L.chain, nextstat)} (6) L →Ls S1 {L.chain:= S1 .chain } 按照上述文法产生式相应的语义动作,加上前述关于赋值句和布尔表达式的翻译法,语句   while (A<B) do if (C<D) then X∶=Y+Z    将被翻译成如下的一串四元式:   100 if A<B goto 102   101 goto 107   102 if C<D goto 104   103 goto 100   104 T∶=Y+Z   105 X∶=T   106 goto 100   107 while (A<B) do if (C<D) then X∶=Y+Z for循环语句 for i∶=E1 step E2 until E3 do S1   为了简单起见,假定E2总是正的。在这种假定下,上述循环句的意义等价于:   i∶=E1;   goto OVER;   AGAIN: i∶=i+E2;   OVER: if i≤E3 then   begin S1; goto AGAIN end; 翻译见P173-P174 开关语句 开关语句(case语句或switch语句) switch E of   case V1:S1   case V2:S2   …   case Vn-1:Sn-1   default:Sn   end 如果分叉不太多,case语句翻译成如下的一连串条件转移语句。   t∶=E;   L1:if t≠V1 goto L2;   S1;   goto next;   L2:if t≠V2 goto L3;   S2   goto next;   …   Ln-1:if t≠Vn-1 goto Ln;   Sn-1;   goto next;   Ln:Sn;   next: 另一种方法:P172 图8.15 goto语句 多数程序语言中的转移是通过标号和goto语句实现的。带标号语句的形式是L∶S;goto语句的形式是goto L。 当L∶S;语句被处理之后,标号L是定义了的。即在符号表中,将登记L的项的地址栏中登上语句S的第一个四元式的地址。 如果goto L是一个向上转移的语句,那么,当编译程序碰到这个语句时,L必是已定义了的。通过对L查找符号表获得它的定义地址p,编译程序可立即产生出相应于这个goto L的四元式如(j,-,-,p)。 如果goto L是一个向下转移的语句,也就是说,标号L尚未定义,那么,若L是第一次出现,则把它填进符号表中并标志上“未定义”。 由于L尚未定义,对goto L只能产生一个不完全的四元式(goto -),它的转移目标须待L定义时再回填进去。 在这种情况下,必须把所有那些以L为转移目标的四元式的地址全都记录下来,以便一旦L定义时就可对这些四元式进行回填。 我们将采用如图8.13所示的拉链办法,把所有以L为转移目标的四元式串在一起。链的首地址放在符号表中L的地址栏中 建链的方法是:若goto L中的标号L尚未在符号表中出现,则把L填入表中,置L的“定义否”标志为“未”,把nextstat填进L的地址栏中作为新链首,然后,产生四元式(p)(goto 0),其中0为链尾标志。若L已在符号表中出现(但“定义否”标志为“未”),则把它的地址栏中的编号(记为p)取出,把nextstat填进该栏作新链首,然后,产生四元式(q)(goto p)。 一旦标号L定义时,我们将根据这条链回填那些待填转移目标的四元式。一般而言,假定用下面的产生式来定义标号语句 S→label S label→i: 1.若i所指的标识符(假定为L)不在符号表中,则把它填入,置类型为标号,定义否为已,地址为nextstat。 2.若L已在符号表中但类型不为标号或定义否为已,则报告出错。 3.若L已在符号表中,则把标志未改为已,然后,把地址栏中的链首(记为q)取出,同时把nextstat填在其中,最后,执行回填。 过程调用的四元式产生 过程调用的实质是把程序控制转移到子程序,在转子之前,必须用某种办法把实参的信息传给调用的子程序。 传递实参信息方面有种种不同的方法,我们这里只讨论一种,即传实参地址的方式。 若实参是一个变量或数组,则直接传递地址。 若实参是表达式,如:A+B或2,则把它们的值计算出来,并存放在一个临时变量T中,然后传递T的地址。 传递实参地址的

文档评论(0)

翰林大当家 + 关注
实名认证
服务提供商

文案个性定制,计划书、方案、策划书专业撰写。

1亿VIP精品文档

相关文档