Question

Je veux faire des variables que je générons en b disponible dans c:

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

Un exemple simple:

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

donc je peux, dire plus tard dans c:

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

Est-il possible de le faire? Toute aide serait vraiment appréciée!

Était-ce utile?

La solution

result doit être une variable globale. Vous pouvez le faire en incluant

%{
    int result;
%}

en haut de votre fichier YACC. Bien sûr, vous devez également remplacer int result = 0 et int result = 1 avec result = 0 et result = 1 respectivement.

Autres conseils

Vous pouvez le faire comme on peut toutefois suggéré il est généralement pas une bonne idée d'utiliser dans les règles de GLOBALS syntaxe. Déclarer un type pour b et c afin que vos règles ressemblent à ceci:

%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);};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top