我有野牛规则

block: LBRACE  { some code } decls stmts RBRACE {more code }
     ;


问题在“更多代码”部分,我有

$$ = $3 ;


基本上,我希望block的返回值为stmts。当我这样做时,Bison说“ $ 3的块没有类型。”如果删除包含某些代码的代码块并将其粘贴到后一个块中,bison不会抱怨。我将stmts及其所有派生声明为类型。那么,野牛不允许这样做吗?我可以对语法进行更改以适应这种情况,但是仅使用上述内容将很繁琐且容易得多。

最佳答案

使用$4引用stmts。由于您具有mid-rule action,因此所有后续符号号都会发生偏移,因为操作本身可以具有值。

相应的组件编号为:
$ 1 LBRACE
$ 2 { some code }
$ 3 decls
$ 4 stmts
$ 5 RBRACE
$ 6 { more code }

关于c - 在野牛中分割语法规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3592747/

10-10 19:28