Затемните страницу и покажите индикатор загрузки

Вы должны понимать, что правила lexer ANTLR соответствуют их позиции в файле грамматики. Лексер не «слушает» то, что может понадобиться парсеру в определенной позиции в правиле парсера. Лексер пытается сопоставить как можно больше символов, и когда 2 (или более) правила совпадают с одинаковым количеством символов, первое правило будет побеждено.

В вашем случае это означает, что 15 будет всегда обозначаться как TimeDate и никогда не как TimeYear, потому что оба правила соответствуют 15, но сначала определяется TimeDate. 2015 будет обозначаться как TimeYear, потому что никакое другое правило не соответствует 4 цифрам.

Решение было бы изменить TimeYear на правило парсера:

timeYear
 : TimeDate TimeDate?
 ;
13
задан Peter Mortensen 21 March 2012 в 13:49
поделиться