条件语句的翻译结构 注意, 动作2中 的内容与教材中 因此,if-then-else结构的翻译文法可写为: 的内容略有不同, 但功能相同。 S→if E then BackPatch(E.TC,NXQ);/*动作1:回填Ey链*/} S(1)else {intT=GEN(j,0,0,0);/*S(1)的常规出口,由此转出所在 的条件语句;注意:此时NXQ在GEN函数内被加1*/ T=Merge(T,S(1).Chain); BackPatch(E.FC,NXQ)i/*动作2:将S的常规出口与 S程序结构内的其它出口(已在的翻译过程中拉成链, 由S).Chain,属性指示)合并成一个链;并以S2的第一 条四元式的序号回填E的假链*/ S(2){S.Chain=Merge(T,S(2).Chain); /*动作3:将的S2)出口与S2)的出口合并,作为S的出口*/ 条件语句的翻译结构 因此,if-then-else结构的翻译文法可写为: S→if E then {BackPatch(E.TC,NXQ);/*动作1:回填E的真链*/} S(1) else {int T= GEN(j,0,0,0); /*S(1)的常规出口,由此转出所在 的条件语句;注意:此时NXQ在GEN函数内被加1 */ T=Merge(T, S(1) .Chain); BackPatch(E.FC,NXQ); /*动作2:将S (1)的常规出口与 S (1)程序结构内的其它出口(已在的翻译过程中拉成链, 由S (1).Chain属性指示)合并成一个链;并以S (2)的第一 条四元式的序号回填E的假链*/ } S(2) {S.Chain=Merge(T, S(2) .Chain); /*动作3:将的S (2)出口与S (2)的出口合并,作为S的出口*/ } 注意,动作2中 的内容与教材中 的内容略有不同, 但功能相同