正在加载图片...
Xs已经出现在语义栈上。因为在Y以下子树的任何归约之前,Xs的值一直存 在,因此它可以被Y继承。如果用复写规则Yi=Xs来定义Y的继承属性Yi, 则在需要Yi时,可以使用ⅹs。这一点可以通过阅读课堂讲稿中的例子加以理 解。 课堂讲稿中倒数第2页中的Yacc程序片断。 输入串为 babb时的输出结果为: BI S3 NUM2 是将A:B{Ss=num*2;}AB{num=$2;$S=$3+1;}用如下两条产生式 替换 A:BMAB{num=$2;$$=$3+l;} M:{$$=num*2;} 此外,请大家通过阅读Yacc文档,理解一下$$出现在不同位置时的 含义。如出现在产生式的末尾、中间的语义规则集(语义动作)中,出现在=的 左边和右边X.s 已经出现在语义栈上。因为在 Y 以下子树的任何归约之前,X.s 的值一直存 在,因此它可以被 Y 继承。如果用复写规则 Y.i:=X.s 来定义 Y 的继承属性 Y.i, 则在需要 Y.i 时,可以使用 X.s。这一点可以通过阅读课堂讲稿中的例子加以理 解。 课堂讲稿中倒数第 2 页中的 Yacc 程序片断。 输入串为 bbabb 时的输出结果为: B1 B1 B1 B2 S3 NUM2 是将 A: B {$$ = num * 2;} A B {num = $2; $$ = $3+1; } 用如下两条产生式 替换: A: B M A B {num = $2; $$ = $3+1; } M: {$$ = num * 2;} 此外,请大家通过阅读 Yacc 文档,理解一下 $$ 出现在不同位置时的 含义。如出现在产生式的末尾、中间的语义规则集(语义动作)中,出现在:=的 左边和右边
<<向上翻页
©2008-现在 cucdc.com 高等教育资讯网 版权所有