控制利语句的翻泽文法 现在,我们讨论(5.8)所给文法的翻译。我们将文法进行 改写(拆分),为便于理解,我们将原文法中的E、S、L、A 更名为Expr、Statement、Series和Assignment。 1.Condition-if Expr then {BackPatch($2.TC,NXQ); $$.Chain=$2.FC;} 当使用此产生式进行归约时,布尔表达式Ep的四元式序 列已经产生,并且then后的语句S的第一四元式序号已 能确定(即NXQ的值).因此,可用NXQ回填Expr的T链; 由于Exp的F链的去向未定,同时,因在执行归约动作时 Exp将从分析栈中弹出,所以其FC属性需保留下来, 因此它将作为Condition的一个综合属性Chain(整型, 描述某四元式序列链的链首地址(序号))传递上去,待 以后能确定地址时回填。 控制语句的翻译文法 现在,我们讨论(5.8)所给文法的翻译。我们将文法进行 改写(拆分),为便于理解,我们将原文法中的E、S、L、A 更名为Expr、Statement、Series和Assignment。 1.Condition→ifExpr then {BackPatch($2.TC,NXQ); $$.Chain=$2.FC;} 当使用此产生式进行归约时,布尔表达式Expr的四元式序 列已经产生,并且then后的语句S的第一四元式序号已 能确定(即NXQ的值).因此,可用NXQ回填Expr的T链; 由于Expr的F链的去向未定,同时,因在执行归约动作时 Expr将从分析栈中弹出,所以其FC属性需保留下来, 因此它将作为Condition的一个综合属性Chain(整型, 描述某四元式序列链的链首地址(序号))传递上去,待 以后能确定地址时回填