Viele Sprachen verpflichtet, eine Zeichenfolge mit irgendeiner Art von Zitat, wie folgt aus:Wie kann ich einen Escape-Charakter mit ANTLR 4 entkommen lassen?
QuotedString : '"' .*? '"';
zu benutzen:
"Rob Malda is smart."
ANTLR 4 kann mit einem Lexer Regel wie diese eine solche Zeichenfolge übereinstimmen bestimmte Zeichen in der Zeichenfolge, sie müssen maskiert werden, etwa so:
"Rob \"Commander Taco\" Malda is smart."
ANTLR 4 kann diese Zeichenfolge ebenfalls abgleichen;
EscapedString : '"' ('\\"|.)*? '"';
(genommen von P96 von The Definitive ANTLR 4 Referenz)
Hier ist mein Problem: Nehmen wir an, dass das Zeichen für die Flucht der gleichen Charakter wie der String-Begrenzer ist. Zum Beispiel:
"Rob ""Commander Taco"" Malda is smart."
(. Dies ist völlig legal in Powershell)
Welche Lexer Regel würde dieses Spiel? Ich würde denken, dies funktionieren würde:
EscapedString : '"' ('""'|.)*? '"';
Aber es funktioniert nicht. Der Lexer markiert das Escape-Zeichen "
als das Ende des Zeichenfolgebegrenzers.
Es funktioniert, danke. Aber es funktioniert nur, wenn ich den gierigen Quantifizierer benutze, nicht den nicht-gierigen. Warum das? –
@ james.garriss du bist willkommen. Ich habe einige zusätzliche Informationen zum nicht-gierigen Matching hinzugefügt. –
Es ist sehr interessant zu sehen, wie die Negation wie ein nicht gieriger Quantifizierer funktioniert. Cool. –