Problema yacc: hacer que los datos disponibles en la próxima no Terminal
Pregunta
Quiero hacer algunas variables genero en B disponibles en c:
a : b c { ...some code...}
Un simple ejemplo:
b : X { int result = 0; }
| Y { int result = 1; }
por lo que puedo, más adelante en c decir:
c : D { printf(result + 1); }
| E { printf(result + 2); }
¿Hay alguna posibilidad de hacer eso? Cualquier ayuda sería realmente apreciada!
Solución
result
debe ser una variable global. Usted puede hacer esto mediante la inclusión
%{
int result;
%}
en la parte superior de su archivo YACC. Por supuesto, también debe reemplazar int result = 0
y int result = 1
con result = 0
y result = 1
respectivamente.
Otros consejos
Se puede hacer como se sugiere puede, sin embargo por lo general no es una buena idea utilizar variables globales en las reglas de sintaxis. Declarar un tipo para b
y c
por lo que sus reglas se parecen a esto:
%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);};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow