Ho una semplice grammatica come segue:ANTLR4: ignorare gli spazi bianchi in ingresso, ma non quelli in stringhe letterali
grammar SampleConfig;
line: ID (WS)* '=' (WS)* string;
ID: [a-zA-Z]+;
string: '"' (ESC|.)*? '"' ;
ESC : '\\"' | '\\\\' ; // 2-char sequences \" and \\
WS: [ \t]+ -> skip;
Gli spazi in ingresso sono completamente ignorati, compresi quelli nella stringa letterale.
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());
Questa stampa il seguente output:
3: key="valuewithspacesinbetween"
Ma, mi aspettavo gli spazi bianchi nella stringa letterale da conservare, cioè
3: key="value with spaces in between"
E 'possibile correggere la grammatica per ottenere questo comportamento o devo semplicemente ignorare CommonTokenStream per ignorare gli spazi bianchi durante il processo di analisi?
rimozione del comando di salto è esattamente quello che mi serviva – raghavsood33