在 ANTLR4 中重复特定次数的令牌
Repeat a token specific number of times in ANTLR4
我想设计一个表达日期格式类型的规则
喜欢 :
- 'ddmmyyyy'
- 'dd/mm/yyyy'
- 'mm/dd/yyyy'
- 'dd-mm-yyyy'
- 'yyyymmdd'
我在 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 倍)。然而,这似乎有点奇怪。
我想设计一个表达日期格式类型的规则 喜欢 :
- 'ddmmyyyy'
- 'dd/mm/yyyy'
- 'mm/dd/yyyy'
- 'dd-mm-yyyy'
- 'yyyymmdd'
我在 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
中引用 '{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 倍)。然而,这似乎有点奇怪。