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!

¿Fue útil?

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
scroll top