0
block:
    "{" { //push scope;}
    multi_stmt
    "}" {
        //pop scope
        $$=new ASTNode_Block($2,..........)
     }

バイソンにブロック構造を実装しようとしています。ただし、ここで $2 (multi_stmt からの戻り値) にアクセスするのに問題があります。

ps: 「|」を使用しないことを意図しています。それらを分離するため、注文で実行することができます。

4

2 に答える 2

4

ルールの途中のアクションにも数値があります (ただし、既定では戻り値の型はありません)。したがって、 の値multi_stmt$3ではなく$2です。

$1は開き括弧 (これは であるべきだと私は思います'{'-- "{"bison では違います --)、$2は規則の途中のアクション、および$3は閉じ括弧です。multi_stmt$4

于 2013-10-21T21:34:39.320 に答える
0

{second in lineを削除してみてください"{" {。私が正しく理解している場合、あなたは文法規則を定義するつもりな{ multi_stmt }ので、2番目{はここで間違いです。

于 2013-10-21T21:23:49.503 に答える