2017-04-07 27 views
0

如何在bison/yacc中使用继承的属性?
说,我有一个这样的语法 -
程序 - >撑条bison/yacc中的继承属性

我想要做的是野牛:
程序:支杆{$$下一= newLabel()。 $ 1.next = $$。next; }

接下来是在结构中声明的属性,并且该类型被添加到联合。

回答

0

有时可以使用mid-rule actions来模拟自底向上解析时的自上而下遍历,但到目前为止,最简洁和最灵活的方法是在初始解析之后在AST中填充属性,必要。

0

btyacc你可以使用:

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

stmts($arg) : .... { $$.next = $arg; ... } 

做这样的事情。这相当于

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

stmts: .... { $$.next = $<tag>0; ... } 

in bison(or yacc),but more type-safe。在这两种情况下,您都需要正确的%union%type声明。