第四篇 语法制导翻译生成中间代码.ppt

* 4.7 布尔表达式 拉链与回填 翻译方案需要解决的两个问题: 如何实现表达式的真、假出口; 如何在语法分析的同时正确生成三地址码序列,即所有的转向均可确定。 换句话讲,设计一种什么样的翻译方案,使得仅对分析树进行一次遍历(LR分析中就是对分析树的一次自下而上的遍历)即可生成所需的中间代码序列。 拉链与回填的基本思想: 当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链; 一旦所转向的地址被确定,则沿此链将所有的三地址码中回填入此地址。 * 4.7 布尔表达式 新增函数与属性: 属性.tc:真出口链,链接所有转向真出口的三地址码; 属性.fc:假出口链,链接所有转向假出口的三地址码。 函数mkchain(i):为序号为i的三地址码构造一个新链,且返回指向该链的指针; 函数merge(P1,P2):合并链P1和P2,且P2成为合并后的链头,并返回链头指针; 过程backpatch(P,i):将P链中所有链域均回填为i值。 (i) goto - ... (j) goto - ... (k) p1:=mkchain(i)、p2:=mkchain(j) p2:=merge(P1, P2) backpatch(P2, k) (i) goto k ... (j) goto k ... (k) * 4.7 布尔表达式 属性与语义规则 属性.

文档评论(0)

1亿VIP精品文档

相关文档