如何匹配ANTLR 3中固定数量的字符?

如何匹配ANTLR 3中固定数量的字符?,antlr,grammar,antlr3,Antlr,Grammar,Antlr3,我想在我的ANTLR语法中解析ISO8601日期 2001-05-03 我的语法文件中有以下条目: date : FOUR_DIGIT ('-')? TWO_DIGIT ('-')? TWO_DIGIT ; FOUR_DIGIT : TWO_DIGIT TWO_DIGIT ; TWO_DIGIT : DIGIT DIGIT ; DIGIT : ('0'..'9') ; 我知道我可以将一个或多个与数字+匹配,将零个或多个与数字* 虽然这样做有效,但是否有更简单

我想在我的ANTLR语法中解析ISO8601日期

2001-05-03
我的语法文件中有以下条目:

date    : FOUR_DIGIT ('-')? TWO_DIGIT ('-')? TWO_DIGIT ;

FOUR_DIGIT
    : TWO_DIGIT TWO_DIGIT ; 

TWO_DIGIT
    : DIGIT DIGIT ;

DIGIT   : ('0'..'9') ;
我知道我可以将一个或多个与
数字+
匹配,将零个或多个与
数字*


虽然这样做有效,但是否有更简单的语法来指定我想要精确匹配的2位数字?

我很确定ANTLR 3除了
*
+
之外没有量词<代码>数字似乎是获得所需行为的最合理方式

贾罗德·罗伯森写道:

虽然这是可行的,但是否有更简单的语法来指定我希望正好匹配2位数字


不,
数字
是精确匹配两个数字的唯一方法。不幸的是,ANTLR不支持类似于
数字{2}
的东西。

我删除了一个月,它没有给我买任何东西,因为它与试图以同样的方式限制天数相冲突。而且
00
将不是有效的月份。我明白了。是的,这看起来更好:只需“松散地”匹配日期,并在稍后阶段检查它是否为有效日期。也许你知道,但要知道,所有4位(和2位)数字现在都标记为四位(或两位)。因此,从任何解析器规则中调用DIGIT+都无法匹配四位或两位连续的数字。@Jarrod,是的,我想了很多,但想确定一下。只是对于那些将来路过的人,我放弃了在解析器中解析日期,并决定最好直接在代码中解析日期,直到我能够找到一种本地解析日期的方法,而不会与以
数字
模式开头的其他术语发生冲突。