在 ANTLR4 中重复特定次数的令牌

Repeat a token specific number of times in ANTLR4

我想设计一个表达日期格式类型的规则 喜欢 :

我在 Lexer 中试过了,但没有用(标记识别错误)

fragment DATE_SEPARATOR: ('/'|',');

FORMATE
: '\'' (MONTH{1,2} (DATE_SEPARATOR)? DAY{1,2}  (DATE_SEPARATOR)? YEAR{1,4}
| DAY{1,2}  (DATE_SEPARATOR)? MONTH{1,3}  (DATE_SEPARATOR)? YEAR{1,4}
| YEAR{1,4}  (DATE_SEPARATOR)? MONTH{1,3}  (DATE_SEPARATOR)? DAY{1,2})
;
fragment DAY : ('d'|'D'|'day'|'DAY') ;
fragment MONTH : ('m'|'M'|'Mon'|'Month'|'mon'|'month') ;
fragment YEAR : ('y'|'Y'|'Year'|'year'|'Yr'|'yr') ;

我只在解析器中调用了 FORMATE,其后 SINGLE_QUOTE 在 Lexer

中引用 '
ANTLR 不支持

{1,4}。如果你想匹配 1 到 4 次之间的东西,你需要做:

NUMBER : D (D (D D?)?)?;

fragment D : [0-9];

但是当您执行 YEAR{1,4} 并且 YEAR 片段匹配 ('y'|'Y'|'Year'|'year'|'Yr'|'yr') 时,如果 {1,4} 有效,您将成功匹配 "YearYrYyr"YEAR 片段的 4 倍)。然而,这似乎有点奇怪。