bison/yacc中的继承属性

bison/yacc中的继承属性,bison,Bison,如何在bison/yacc中使用继承属性 喂,我有这样的语法- 程序->STMT 我想做的是在野牛城: 程序:stmts{$$.next=newLabel();$1.next=$$.next;} 下面是在结构中声明的属性,该类型被添加到union中 在自底向上的解析过程中,有时可以使用来模拟自顶向下的遍历,但到目前为止,最干净、最灵活的方法是在初始解析后,使用任何看起来必要的树遍历组合在AST中填充属性。在中,您可以使用: program: stmts(newLabel()) { $$.next

如何在bison/yacc中使用继承属性
喂,我有这样的语法-
程序->STMT

我想做的是在野牛城:
程序:stmts{$$.next=newLabel();$1.next=$$.next;}

下面是在结构中声明的属性,该类型被添加到union中

在自底向上的解析过程中,有时可以使用来模拟自顶向下的遍历,但到目前为止,最干净、最灵活的方法是在初始解析后,使用任何看起来必要的树遍历组合在AST中填充属性。

在中,您可以使用:

program: stmts(newLabel()) { $$.next = $1.next; }

stmts($arg) : .... { $$.next = $arg; ... }
做这种事。这相当于

program: { $<tag>$ = newLabel()); } stmts { $$.next = $1.next; }

stmts: .... { $$.next = $<tag>0; ... }
程序:{$$=newLabel());}stmts{$$.next=$1.next;}
stmts:。。。。{$$.next=$0;…}
在野牛(或yacc)中,但类型更安全。在这两种情况下,您都需要正确的
%union
%type
声明