我有一个野牛规则
block: LBRACE { some code } decls stmts RBRACE {more code }
;
问题出在“更多代码”部分,我有
$$ = $3 ;
基本上,我希望块的返回值为stmts。当我这样做时,Bison说“$ 3块没有类型。”如果我删除包含一些代码的代码块并将其粘贴到后一个块中,野牛不会抱怨。我有stmts和所有衍生物声明为类型。那么野牛不允许这样做吗?我可以对语法进行更改以适应这种情况,但使用上述内容将会非常繁琐且容易。
答案 0 :(得分:2)
使用$4
来引用stmts
。由于您有一个mid-rule action,所有前进的符号编号都会被偏移,因为操作本身可以有一个值。
相应的组件编号为:
$ 1 LBRACE
$ 2 { some code }
$ 3 decls
$ 4 stmts
$ 5 RBRACE
$ 6 { more code }