2010-08-28 118 views
0

语法规则我​​有一个野牛规则劈裂野牛

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

的问题是,“更多的代码”一节中,我有

$$ = $3 ; 

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

回答

2

使用$4来指代stmts。既然你有一个mid-rule action,所有后续的符号数字都会被抵消,因为这个动作本身可以有一个值。

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