西安电子科技大学计算机考研编译原理第四章 语法制导翻译生成中间代码.ppt

西安电子科技大学计算机考研编译原理第四章 语法制导翻译生成中间代码.ppt

西安电子科技大学计算机考研编译原理第四章 语法制导翻译生成中间代码

* 4.7 布尔表达式 [例4.20] 再考虑布尔表达式ab or cd and ef的短路计算: 分析树: 注释分析树: if ab goto LT goto L2 L2: if cd goto L1 goto LF L1: if ef goto LT goto LF 三地址码序列: 原理上的,不能执行!! 自下而上分析中计算继承属性(.true、.false)? * 4.7 布尔表达式 拉链与回填 翻译方案需要解决的两个问题: 如何实现表达式的真、假出口; 如何在语法分析的同时正确生成三地址码序列,即所有的转向均可确定。 换句话讲,设计一种什么样的翻译方案,使得仅对分析树进行一次遍历(LR分析中就是对分析树的一次自下而上的遍历)即可生成所需的中间代码序列。 拉链与回填的基本思想: 当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链; 一旦所转向的地址被确定,则沿此链将所有的三地址码中回填入此地址。 * 4.7 布尔表达式 新增函数与属性: 属性.tc:真出口链,链接所有转向真出口的三地址码; 属性.fc:假出口链,链接所有转向假出口的三地址码。 函数mkchain(i):为序号为i的三地址码构造一个新链,且返回指向该链的指针; 函数merge(P1,P2):合并链P1和P2,且P2成为合并后的链头,并返回链头指针; 过程backpatch(P,i)

文档评论(0)

1亿VIP精品文档

相关文档