第8章 语义分析和中间代码生成.pptVIP

  • 11
  • 0
  • 约1.55万字
  • 约 84页
  • 2016-04-13 发布于江苏
  • 举报
第8章 语义分析和中间代码生成.ppt

通过上面的例子可以看出,(7)是该条件语句的真出口,(p+1)是该条件语句的假出口。而E.true和E.false必须是在翻译到S1 或S2时才能确定它的语句编号是什么,所以需要回填。并且需要回填的语句很多,如四元式(1)和(5)需要回填E.true的值,(4)和(6)需要回填E.false的值。这些要回填的四元式标号需要记住。因此就采用“拉链”的技术,如果不能记住,则无法回填了。把需要回填E.true的值作为真链,把需要回填E.false的值作为“假“链。 * * 拉链回填 一遍扫描 先产生暂时没有填写目标标号的转移指令; 对于每一条这样的指令作适当的记录; 一旦转移的目标“标号”被确定下来,再将它“回填”到相应的指令中 布尔表达式E设属性E.turelist和E.falselist E.truelist——对应真出口Etrue E.falselist——对应假出口Efalse 两遍扫描 n1 (j,,,0) …… n2(j,a,b, n1) …… n3(j=,c,d,n2) E.Turelist n3 * * 拉链回填 翻译模式用到如下两个函数: 1.merge(p1,p2):将由p2指向的表接在p1所指向的链表后,返回p1 2.backpatch(p,i):把i作为目标标号回填到p所指向的链表中的每一个转移指令中去。 此处的“链表”都是

文档评论(0)

1亿VIP精品文档

相关文档