Полноценные имена, которые не могут быть правильно распознаны с действительной грамматикой [duplicate]

1
задан Mike Lischke 20 December 2014 в 10:40
поделиться

1 ответ

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

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

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

timeYear
 : TimeDate TimeDate?
 ;
2
ответ дан Bart Kiers 31 August 2018 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: