Antlr4解析日期

Antlr4 Parsing dates

我正在尝试使用Antlr4以C#为目标来解析日期。就我而言,有效日期应具有以下

  • 格式为year / month / day
  • 年份必须只有4位数字
  • 月和日必须只有2位数字

我知道类似的问题已经在这里,但是他们的解决方案似乎对我不起作用

  • 如何创建将解析日期的antlr4语法
  • Antlr:识别日期和数字的最简单方法是?

我在某处读到有类似优先级的解析,其中首先评估基于语法文件编写方式的最上层规则。因此,请考虑除日期外,我的语法还应该能够解析整数。

我掌握并使用的语法(但不遵循上述规则)如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
 *  Parser Rules
 */

dateFormat :  DECIMAL '/' DECIMAL '/' DECIMAL
   ;

/*
 *  Lexer Rules
 */

DECIMAL:            DEC_DIGIT+;

fragment DEC_DIGIT:    [0-9];

我试图放下

之类的东西

YEAR or year : DEC_DIGIT DEC_DIGIT DEC_DIGIT DEC_DIGIT;

在词法分析器或解析器规则中为

,但它不起作用。

有什么想法/建议吗?

注意:无论何时我不应该使用Antlr,请不要提出正则表达式的替代方案或争论。


我想这应该起作用。 date解析日期规则,integer整数规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
date
    : year=FOUR_DIGITS SLASH month=TWO_DIGITS SLASH day=TWO_DIGITS
    ;

integer
    : INTEGER
    | FOUR_DIGITS
    | TWO_DIGITS
    ;

FOUR_DIGITS: DIGIT DIGIT DIGIT DIGIT;
TWO_DIGITS:  DIGIT DIGIT;
INTEGER:     DIGIT+;
SLASH:       '/';

fragment     DIGIT: [0-9];