java - ANTLR标签异构替代品?

标签 java parsing antlr4

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

这个

    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 token 变量;对于非限定替代方案,Token type 的值为 null。

或者更好:

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

关于java - ANTLR标签异构替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35323173/

相关文章:

Java:将指定类型分配给泛型类型

java - 使用逗号分隔符将 double 转换为 2 位小数

php - 如何在外部网站上提交表单并获取生成的 HTML?

algorithm - 如何在给定解析图的情况下完成 ML 类型推理算法

html - 如何解析格式不正确的 HTML 文件?

antlr - 使用 ANTLR4 生成的访问者生成 AST

android - "smali"语法规范 |小日志注入(inject)

java - 从 JavaScript gwt 调用 Java

java - equals 在 for 循环内部不起作用

compiler-errors - 通过Ubuntu终端进行编译(在Windows 10上)