Как сопоставить фиксированное количество символов в ANTLR 3?
Я хочу проанализировать даты ISO 8601 в моей грамматике ANTLR.
2001-05-03
у меня есть следующие записи в файле грамматики:
date : FOUR_DIGIT ('-')? TWO_DIGIT ('-')? TWO_DIGIT ;
FOUR_DIGIT
: TWO_DIGIT TWO_DIGIT ;
TWO_DIGIT
: DIGIT DIGIT ;
DIGIT : ('0'..'9') ;
Я знаю, что могу сопоставить один или несколько с DIGIT+ и с DIGIT*
пока это работает, есть ли более простой синтаксис, чтобы указать, что я хочу соответствовать точно 2 DIGIT?
2 ответов
Я уверен, что ANTLR 3 не имеет кванторов, кроме *, + и ?. DIGIT DIGIT DIGIT DIGIT кажется наиболее разумным способом получить поведение, которое вы хотите.
Джеррод Роберсон написал:
пока это работает, есть ли более простой синтаксис, чтобы указать, что я хочу соответствовать точно 2 цифре?
нет, DIGIT DIGIT Это единственный способ, чтобы соответствовать точно две цифры. ANTLR делает не поддержка что-то вроде DIGIT{2}, к сожалению.