Antlr4中的数字范围?在Antlr4中lexer规则是否应该明确无误?

时间:2016-12-19 11:55:01

标签: grammar antlr4 lexer

在Antlr4中lexer规则是否应该明确无误?

假设我想解析日期并定义

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

这里我在词法分析器中定义了数字范围。但看起来它不起作用,因为它们含糊不清。

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

1 个答案:

答案 0 :(得分:1)

此类验证最好在创建解析树后执行的侦听器或访问者中执行。从一个数字开始:

NUMBER : [0-9]+;

然后根据以下内容定义hourmonth

hour : NUMBER;
month : NUMBER;

获得解析树后,请实施enterHourenterMonth以验证每个中包含的NUMBER是否有效。

如果用户输入错误的输入,此方法会产生错误恢复和错误报告的最佳组合。