Antlr4 解析日期



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

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

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

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

我在某处读到过,有一种类似优先级的解析,首先评估基于语法文件编写方式的最顶层规则。所以考虑到除了日期之外,我的语法也应该能够解析整数。

我拥有并工作的语法(但它不遵循上述规则如下)

/*
 *  Parser Rules
 */
dateFormat :  DECIMAL '/' DECIMAL '/' DECIMAL
   ;
/*
 *  Lexer Rules
 */
DECIMAL:            DEC_DIGIT+;
fragment DEC_DIGIT:    [0-9];

我试图放类似的东西

年份

或年份 : DEC_DIGIT DEC_DIGIT DEC_DIGIT DEC_DIGIT;

在词法分析器或解析器规则中,但它不起作用。

任何想法/建议?

注意:请不要建议正则表达式的替代品,也不要争论我什么时候应该使用 Antlr。

我想这应该有效。 date日期的解析规则,integer整数的解析规则。

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];

相关内容

  • 没有找到相关文章

最新更新