【问题标题】:Digit ranges in Antlr4? Should lexer rules be unambiguous in Antlr4?Antlr4中的数字范围? Antlr4 中的词法分析器规则是否应该明确?
【发布时间】:2016-12-19 11:55:00
【问题描述】:

Antlr4 中的词法分析器规则是否应该明确?

假设我想解析日期并定义

hour: DIGIT09 | (DIGIT1 DIGIT09) | (DIGIT2 DIGIT04);

month: DIGIT19 | (DIGIT1 DIGIT02);

DIGIT12: '1'..'2';

DIGIT1: '1';

DIGIT2: '2';

DIGIT19: '1'..'9';

DIGIT09: '0'..'9';

DIGIT04: '0'..'4';

DIGIT04: '0'..'2';

在这里,我在词法分析器中定义了数字范围。但看起来它不起作用,因为它们是模棱两可的。

我可以在解析器而不是词法分析器中定义范围吗?

【问题讨论】:

    标签: grammar antlr4 lexer


    【解决方案1】:

    这种类型的验证最好在创建解析树后执行的侦听器或访问者中执行。以数字开头:

    NUMBER : [0-9]+;
    

    然后在此基础上定义hour和month:

    hour : NUMBER;
    month : NUMBER;
    

    拥有解析树后,实现enterHour 和enterMonth 以验证每个包含的NUMBER 是否有效。

    在用户输入错误的情况下,这种方法可以实现错误恢复和错误报告的最佳组合。

    【讨论】:

    • enter 上是否有现成值?我不应该在exit 中这样做吗?我将如何报告测试结果?
    猜你喜欢
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多