如何在bison/yacc中使用继承的属性?
说,我有一个这样的语法 -
程序 - >撑条bison/yacc中的继承属性
我想要做的是野牛:
程序:支杆{$$下一= newLabel()。 $ 1.next = $$。next; }
接下来是在结构中声明的属性,并且该类型被添加到联合。
如何在bison/yacc中使用继承的属性?
说,我有一个这样的语法 -
程序 - >撑条bison/yacc中的继承属性
我想要做的是野牛:
程序:支杆{$$下一= newLabel()。 $ 1.next = $$。next; }
接下来是在结构中声明的属性,并且该类型被添加到联合。
有时可以使用mid-rule actions来模拟自底向上解析时的自上而下遍历,但到目前为止,最简洁和最灵活的方法是在初始解析之后在AST中填充属性,必要。
在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
声明。