Как сопоставить фиксированное количество символов в 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}
, к сожалению.