2010-08-28 166 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 }