Как сопоставить фиксированное количество символов в ANTLR 3? - PullRequest
8 голосов
/ 03 мая 2011

Я хочу разобрать даты 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 ]

7 голосов
/ 03 мая 2011

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

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

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

3 голосов
/ 03 мая 2011

Я почти уверен, что в ANTLR 3 нет квантификаторов, кроме *, + и ?. DIGIT DIGIT DIGIT DIGIT кажется наиболее разумным способом получить желаемое поведение.

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

...