Hallo, ich habe bei Antlr ein Problem mit meiner Grammatik, also in meiner .g4-Datei wie es scheint, weil ich wohl irgendwie nach einer Änderung etwas verhunzt habe. Ich bin gerade dabei eine Grammatik zu schreiben mit der man dann nachher mathematische Ausdrücke, Funktionen usw. auswerten kann. Später will ich die dann auch noch plotten aber so viel erst einmal dazu. Das ganze hat auch schon bis vor kurzem für +, -,*, :, und für zuweisungen, also assignments funktioniert aber jetzt funktioniert davon nur noch das assignemnt. Die ganzen Grundrechenarten nicht mehr. Ich hoffe mal sehr, dass sich hier jemand mit der EBNF bzw. Antlr konkret auskennt.
Code: Alles auswählen
root
: begin=stat EOF
;
stat
: express=expr (SEMI | SEMI begin=stat)?
....
;
expr
: leftop=expr op=(MULT|DIV) rightop=expr
| leftop=expr op=(ADD|SUB) rightop=expr
....
;
..
Da wo jetzt ein ... ist habe ich jetzt einmal was entfernt, um das ganze übersichtlicher zu halten. Das ist auf jeden Fall mein parser grammer und das hier ist das lexer grammar, auch ein wenig gekürzt, um es übersichtlicher zu halten.
Code: Alles auswählen
MULT
: '*'
;
DIV
: '/'
;
ADD
: '+'
;
SUB
: '-'
;
SEMI
: ';'
;
Ich habe jetzt auch vor kurzem einen eigenen ErrorListener geschrieben, da der native ja nicht gerade sehr aussagekräftig ist und damit ich den einfach noch erweitern konnte habe ich dann ebend meinen eigenen geschrieben und den alten beim parser abgemedeldet. Meiner gibt mir dann jetzt aus, wenn ich diese Aufgabe erstelle:
folgenden Fehler:
Code: Alles auswählen
Error on line 1 at char 2 (whitespaces skipped)
mismatched input '+' expecting {<EOF>, '*', '/', '+', '-', ';'}
Sieht jemand den Fehler bzw. das warum? Ich sitze jetzt schon eine ganze Zeit davor und komme nicht weiter, vor allem steht da ja: "mismatched input '+' aber erwartet wird doch entweder ein EOF, *, /, + usw.?
