在Bison中拆分语法规则

时间:2010-08-28 22:31:40

标签: c grammar bison

我有一个野牛规则

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

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

$$ = $3 ;

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

1 个答案:

答案 0 :(得分:2)

使用$4来引用stmts。由于您有一个mid-rule action,所有前进的符号编号都会被偏移,因为操作本身可以有一个值。

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