2016-03-25 3 views
1

Ich erstelle ein YACC-Programm, das polnische Notation (Präfix) verwendet. Es scheint ziemlich einfach zu implementieren, aber ich bekomme einen Fehler, der keinen Sinn ergibt. Der Fehler ist:YACC-Fehler "ist nicht typisiert"

yacc: e - Linie 33 von "calculator.y", 1 $ ('-') ist nicht typisiert

Hier ist der Code für die Ausdrücke. Der Fehler tritt bei der Regel '-' auf. Es stoppt dort, weil ich zum ersten Mal diese aussortiert erhalten möchten:

exp: NUMBER     { $$ = $1; } 
     | NAME     { $$ = $1->value; } 
     | NAME '=' exp   { $1->value = $3; $$ = $3; } 
     | exp EQ exp  { $$ = $1 == $3; } 
     | '-' exp exp  { $$ = $1 - $3; } 
; 

Das Seltsame ist, dass es gut funktioniert, wenn ich es mit Infixschreibweise versuchen. Ich weiß, dass dieser Fehler normalerweise auftritt, wenn Token nicht richtig eingegeben werden, aber sie sind, da sie mit Infix-Notation arbeiten. Irgendwelche Ideen, warum sich das plötzlich mit Präfix ändern würde?

Antwort

0
| '-' exp exp  { $$ = $1 - $3; } 

hier Sie versuchen, den zweiten Ausdruck aus den - Token zu subtrahieren, die nicht typisiert ist, und macht keinen Sinn machen. Sie wollen wahrscheinlich

| '-' exp exp  { $$ = $2 - $3; } 

den zweiten Ausdruck von dem ersten Ausdruck zu subtrahieren ...

+0

Oh, ich verstehe! Ich habe die Reihenfolge der Token falsch verstanden. Vielen Dank! – Bob