Ich habe eine einfache Grammatik für Addition und Substraktion erstellt:
S : EXPRESSION ENDLINE {printf("Result: %dn",$1);}
;
EXPRESSION
: NUMBER "+" NUMBER {$$ = $1 + $3;}
| NUMBER "-" NUMBER {$$ = $1 - $3;}
;
NUMBER : NUM {$$ = $1;}
;
%%
Nach Erreichen des S-Terminals möchte ich schreibenNeue Eingabe nach dem ersten Ergebnis wird gedruckt. Leider habe ich nach dem Einfügen einer zweiten Formel einen Syntaxfehler erhalten. Wie kann ich das erreichen? Ich wäre für Hilfe dankbar.
Antworten:
1 für die Antwort № 1Es geht nicht darum, den Analysebaum zurückzusetzen; Sie müssen die Grammatik erweitern, um eine beliebige Anzahl von Zeilen mit Ausdrücken zu ermöglichen S
rekursive Aufrufe wie folgt einschließen:
S : EXPRESSION ENDLINE {printf("Result: %dn",$1);}
| S EXPRESSION ENDLINE {printf("Result: %dn",$2);}
;
Das mag etwas kitschig sein, also könnten Sie eine neue Regel hinzufügen, die den gleichen Effekt erzielt:
S: RESULT
| S RESULT
;
RESULT : EXPRESSION ENDLINE {printf("Result: %dn",$1);}