Вот простая лексическая грамматика:
lexer grammar TextLexer;
@members
{
protected const int EOF = Eof;
protected const int HIDDEN = Hidden;
}
COMMENT: 'comment' .*? 'end' -> channel(HIDDEN);
WORD: [a-z]+ ;
WS
: ' ' -> channel(HIDDEN)
;
По большей части он ведет себя так, как ожидалось, выхватывая слова из потока и игнорируя все, что ограничено комментарием. . . конец. Но не всегда. Например, если ввод следующий:
quick brown fox commentandending
он увидит, что слово «commentandending» длиннее комментария «commentandend». Таким образом, получается токен «commentandending», а не токен «ing».
Есть ли способ изменить это поведение?