Domanda

Vorrei fare alcune variabili che generano in b disponibile in c:

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

Un semplice esempio:

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

in modo da poter, in seguito in c dire:

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

C'è qualche possibilità di farlo? Qualsiasi aiuto sarebbe molto apprezzato!

È stato utile?

Soluzione

result dovrebbe essere una variabile globale. È possibile farlo includendo

%{
    int result;
%}

nella parte superiore del file YACC. Naturalmente, si dovrebbe sostituire anche int result = 0 e int result = 1 rispettivamente con result = 0 e result = 1.

Altri suggerimenti

Si può fare come suggerito Can, però in genere non è una buona idea usare variabili globali nelle regole di sintassi. Dichiarare un tipo per b e c in modo che le regole di simile a questa:

%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);};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top