Я начал использовать ANTLR и заметил, что он довольно изменчив с его правилами lexer. Очень неприятным примером является следующее:
grammar output;
test: FILEPATH NEWLINE TITLE ;
FILEPATH: ('A'..'Z'|'a'..'z'|'0'..'9'|':'|'\\'|'/'|' '|'-'|'_'|'.')+ ;
NEWLINE: '\r'? '\n' ;
TITLE: ('A'..'Z'|'a'..'z'|' ')+ ;
Эта грамматика не будет соответствовать чему-то вроде:
C:\test.txt
х
Как ни странно, если я изменяю TITLE на TITLE: 'x' ;, он все равно терпит неудачу на этот раз, вызывая сообщение об ошибке "mismatched input" x "Ожидание" x ", что сильно запутывает. Еще более странно, если я заменю использование TITLE в test на FILEPATH, все работает (хотя FILEPATH будет соответствовать больше, чем я считаю совпадением, поэтому в целом это недействительное решение для меня).
Я очень смущен, почему ANTLR дает такие чрезвычайно странные ошибки, а затем внезапно работает без видимых причин, когда тасует вещи.