Ich habe die folgende Grammatik:Warum ist das parsable
grammar Demo;
program: command
IDENTIFIER
;
command:
| 'add'
| 'remove'
;
IDENTIFIER: [a-zA-Z][a-zA-Z0-9]* ;
WHITESPACE: [ \t\n\r]+ -> skip;
Jetzt kann ich eingegeben so etwas wie „add foo“ und ich bekomme das richtige Ergebnis. Aber er akzeptiert auch nur "foo". Ich dachte, dass der Parser eine Ausnahme auslösen wird, weil der Wert mit einem der Befehle beginnen muss? Gibt es eine Option, um das Problem zu beheben? Oder habe ich einen Fehlschluss?
Ich weiß nicht, ANTLR, aber ich nehme an, die ersten '|' Zeichen das Problem zu sein, so dass eine leere Eingabe ermöglicht. Vielleicht ändere es zu 'command: 'add' | 'entfernen'; '? – Seelenvirtuose