ich eine einfache Grammatik wie folgt:ANTLR4: ignorieren weißen Flächen im Eingabe aber nicht diejenigen, die in Stringliterale
grammar SampleConfig;
line: ID (WS)* '=' (WS)* string;
ID: [a-zA-Z]+;
string: '"' (ESC|.)*? '"' ;
ESC : '\\"' | '\\\\' ; // 2-char sequences \" and \\
WS: [ \t]+ -> skip;
Die Räume im Eingangs werden komplett ignoriert, einschließlich der in der Stringliteral.
final String input = "key = \"value with spaces in between\"";
final SampleConfigLexer l = new SampleConfigLexer(new ANTLRInputStream(input));
final SampleConfigParser p = new SampleConfigParser(new CommonTokenStream(l));
final LineContext context = p.line();
System.out.println(context.getChildCount() + ": " + context.getText());
Dies druckt die folgende Ausgabe:
3: key="valuewithspacesinbetween"
Aber ich die weißen Räume im String erwartet wörtlichen, ist es möglich
3: key="value with spaces in between"
Ist also beibehalten werden, um die Grammatik zu korrigieren Um dieses Verhalten zu erreichen, oder sollte ich einfach CommonTokenStream überschreiben, um Whitespace während des Parsing-Prozesses zu ignorieren?
den Sprungbefehl zu entfernen, ist genau das, was ich brauchte, – raghavsood33