Как сопоставить фиксированное количество символов в 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 кажется наиболее разумным способом получить поведение, которое вы хотите.

см.http://www.antlr.org/wiki/display/ANTLR3/Grammars


Джеррод Роберсон написал:

пока это работает, есть ли более простой синтаксис, чтобы указать, что я хочу соответствовать точно 2 цифре?

нет, DIGIT DIGIT Это единственный способ, чтобы соответствовать точно две цифры. ANTLR делает не поддержка что-то вроде DIGIT{2}, к сожалению.