Pergunta

Eu quero fazer algumas variáveis ??que geram em b disponível em c:

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

Um exemplo simples:

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

para que eu possa, mais tarde na c digamos:

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

Existe alguma chance de fazer isso? Qualquer ajuda seria muito apreciada!

Foi útil?

Solução

result deve ser uma variável global. Você pode fazer isso, incluindo

%{
    int result;
%}

na parte superior do seu arquivo YACC. Claro, você também deve substituir int result = 0 e int result = 1 com result = 0 e result = 1 respectivamente.

Outras dicas

Você pode fazer como Can sugeriu, no entanto, geralmente não é uma boa idéia para globals uso em regras de sintaxe. Declarar um tipo para b e c assim que suas regras parecido com este:

%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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top