ANTLR标记异质替代品



我想用一个语法来定义事件的替代方案。

    time:
             type='at ' date
         | type='before ' date 
         | type='vor ' date
    ;

    date:
        SIMPLEDATE
    ;
    DAY: ('0'[1-9]|[12][0-9]|'3'[01]);
    MONTH: ('0' [1-9]|'1'[012]);
    YEAR: [0-2] [890] NUMBER NUMBER;
    SIMPLEDATE: DAY  [- /.] MONTH [- /.] YEAR;

似乎工作正常。

但我想减少第一个像这样的替代方案:

    time:
             type='' date
         | type='before' date
         | type='after' date  
    ;

我尝试了空字符串,因为不接受任何类型。

通过此修改,一个简单的日期不再被识别。

有没有办法标记(异质)更一致?

是的。只是不要在非限定的替代项中提供标签。 Antlr 将在time上下文中生成一个type令牌变量;对于非限定替代项,令牌type的值将为 null。

或者,更好:

time: type=('before'|'after')? date  ;

相关内容

  • 没有找到相关文章

最新更新