Frage

Ich möchte einige Variablen mache ich in b in c verfügbar erzeugen:

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

Ein einfaches Beispiel:

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

so kann ich später in c sagen:

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

Gibt es eine Chance, das zu tun? Jede Hilfe wäre wirklich dankbar!

War es hilfreich?

Lösung

result sollte eine globale Variable sein. Sie können dies tun, indem

%{
    int result;
%}

an der Spitze Ihrer YACC Datei. Natürlich sollten Sie auch jeweils int result = 0 und int result = 1 mit result = 0 und result = 1 ersetzen.

Andere Tipps

Sie können tun, wie Can vorgeschlagen, aber in der Regel ist es keine gute Idee Globals in Syntaxregeln zu verwenden. Deklarieren Sie einen Typ für b und c so Ihre Regeln wie folgt aussehen:

%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);};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top