Мне кажется, что вы сталкиваетесь с ложным предупреждением из-за Линейный приблизительный прогноз . 1-й, 2-й, 3-й, 4-й и 5-й символ DATEVALUE могут быть цифрами, но не все одновременно.
Я бы попытался избавиться от альтернативы 2/4 цифры года. Для начала, вы не хотите нести ответственность за ошибку Y2.1K; во-вторых, это спасает вас от альтернативного синтаксиса DATEVALUE.
Другое решение, которое я бы попробовал, - это использовать другую группировку:
DATEVALUE
: ( '0' .. '9' ) ( '0' .. '9' ) (( '0' .. '9' ) ( '0' .. '9' ))? '-'
( '0' .. '9' ) ( '0' .. '9' ) '-'
( '0' .. '9' ) ( '0' .. '9' )
;
Я думаю, что это более читабельно, так как вы не повторяете часть месяца / дня. Сначала я бы поставил необязательную часть для удобства чтения, но я понимаю, что в этих случаях следует избегать начинать с необязательных частей, поскольку это затрудняет синтаксический анализ.