Yacc Problème: Rendre les données disponibles dans le prochain terminal non
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!
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