Ich schrieb eine Grammatik für eine kleine Sprache, die C-style einzeilige Kommentare versteht, z.Parsing single-line C-style Kommentare mit Antlr
// this is a comment
Hier ist ein Fragment der Grammatik I für diese Sprache schrieb, ist dieser ziemlich viel Art von Arbeiten antlr v3.0.1
SINGLELINE_COMMENT
: '/' '/' (options {greedy=false;} : ~('\r' | '\n'))* ('\r' | '\n')+ {$channel=HIDDEN;};
WS : (' '|'\r'|'\t'|'\u000C'|'\n')+ {$channel=HIDDEN;};
, mit der Ausnahme, dass, wenn der Kommentar im Skript zuletzt ist und kein NL/CR ist beendet, ich habe eine ärgerliche Nachricht von antlr (zur Laufzeit):
line 1:20 required (...)+ loop did not match anything at character '<EOF>'
Wie kann ich diese Nachricht loswerden? Ich habe versucht, EOF
Token der (..)+
Ausdruck hinzufügen, aber das funktioniert nicht.
Ich bin mir nicht sicher, aber was passiert, wenn Sie die neue Zeile optional machen, d. H. Sie ändern das '+' in ein '?'? oder vielleicht ein '*'? – nijoakim
Wie wäre es mit dem Auslassen der gierigen Optionen (sie scheinen nur für das +), und ändern Sie das Plus zu einem Fragezeichen. –