Скажем, у меня есть кусок грамматики ANTLR (лексическая часть)
fragment LETTER : ('a'..'z' | 'A'..'Z') ;
fragment DIGIT : '0'..'9';
INTEGER : DIGIT+ ;
Ident : LETTER (LETTER | DIGIT)*;
WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel = HIDDEN;};
COMMENT : '//' .* ('\n'|'\r') {$channel = HIDDEN;};
Я думаю, что, поскольку WS потребляет все пробелы между токенами, и "x y z", и "xyz" должны были быть идентифицированы как один и тот же токен Ident. Но, по-видимому, только «x y z» будет рассматриваться как 3 Ident. Поэтому я действительно смущен поведением, когда встречается пробел для правила лексера.
Конкретнее, у меня есть правило
VARIABLE: ('A'..'Z')+ DIGIT* ;
Я хочу, чтобы он распознавал идентификаторы переменных, такие как X3, Y4, XX55 и т. Д. Но удивительно, что это правило распознает «X Y», так что это кажется совершенно непонятным. Какая у тебя идея?