ANTLR4: обработка пробелов
Я видел много грамматик ANTLR, которые используют обработку пробелов, как это:
WS: [ \n\t\r]+ -> skip;
// or
WS: [ \n\t\r]+ -> channel(HIDDEN);
Таким образом, пробелы выбрасываются и отправляются в скрытый канал.
С такой грамматикой:
grammar Not;
start: expression;
expression: NOT expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r]+ -> skip;
действительные входыне правда' или же 'не ложь но также 'не правда' что не является желаемым результатом. Изменение грамматики на:
grammar Not;
start: expression;
expression: NOT WS+ expression
| (TRUE | FALSE);
NOT: 'not';
TRUE: 'true';
FALSE: 'false';
WS: [ \n\t\r];
решает проблему, но я не хочу обрабатывать пробелы вручную в каждом правиле.
Обычно я хочу иметь пробел между каждым токеном с некоторыми исключениями (например, '!правда' не нужен пробел между).
Есть ли простой способ сделать это?