ANTLR4: Whitespace-Behandlung

Ich habe viele ANTLR-Grammatiken gesehen, die die Whitespace-Behandlung wie folgt verwenden:

WS: [ \n\t\r]+ -> skip;
// or
WS: [ \n\t\r]+ -> channel(HIDDEN);

So werden die Leerzeichen weggeworfen bzw. an den versteckten Kanal gesendet.

Mit einer Grammatik wie dieser:

grammar Not;

start:      expression;
expression: NOT expression
          | (TRUE | FALSE);

NOT:    'not';
TRUE:   'true';
FALSE:  'false';
WS: [ \n\t\r]+ -> skip;

gültige eingaben sind 'nicht wahr' oder 'nicht falsch' aber auch 'nicht wahrDas ist kein gewünschtes Ergebnis. Ändern der Grammatik in:

grammar Not;

start:      expression;

expression: NOT WS+ expression
          | (TRUE | FALSE);

NOT:    'not';

TRUE:   'true';
FALSE:  'false';

WS: [ \n\t\r];

behebt das Problem, aber ich möchte die Leerzeichen nicht manuell in jeder Regel behandeln.

Im Allgemeinen möchte ich mit einigen Ausnahmen ein Leerzeichen zwischen jedem Token haben (z. B. '!wahr'braucht kein Leerzeichen dazwischen).

Gibt es eine einfache Möglichkeit, dies zu tun?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage