0

b で生成したいくつかの変数を c で使用できるようにしたい:

a   :   b c { ...some code...}

簡単な例:

b :  X  { int result = 0; } 
  |  Y  { int result = 1; }

だから私は、後でcで言うことができます:

c : D   { printf(result + 1); }
  | E   { printf(result + 2);  }

それを行う機会はありますか?どんな助けでも本当に感謝します!

4

2 に答える 2

1

resultグローバル変数にする必要があります。含めることでこれを行うことができます

%{
    int result;
%}

YACC ファイルの先頭にあります。もちろん、andもそれぞれint result = 0andint result = 1に置き換える必要があります。result = 0result = 1

于 2008-12-25T18:45:39.827 に答える
0

Can の提案どおりに実行できますが、一般的に、構文規則でグローバルを使用することはお勧めできません。bandの型を宣言するとc、ルールは次のようになります。

%union {
    int result;
};

%type <result> a b

%start a

%%

b : X {$$ = 0;} | Y {$$ = 1;} ;
c : D {$$ = 1;} | E {$$ = 2;} ;
a : b c {printf("%d", $1 + $2);};
于 2008-12-25T19:49:20.730 に答える