Antlr4不匹配输入(部分匹配)

时间:2019-07-07 09:57:07

标签: regex parsing antlr antlr4

在ANTLR4中,我有以下语法:

ID : [_a-zA-Z][0-9_a-zA-Z]*;
INT_LITERAL : [0-9]+;
FLOAT_LITERAL :[0-9]+'.'?[0-9]*([eE][-+]?)?[0-9]+;

当解析字符串123abc时,我期待一个错误,但是我得到了令牌:

123
abc
<EOF>

我尝试在int末尾添加EOF并使用浮点文字正则表达式,

INT_LITERAL : [0-9]+EOF;
FLOAT_LITERAL :[0-9]+'.'?[0-9]*([eE][-+]?)?[0-9]+EOF;

但即使那样,我仍然会得到部分解析结果

bc
<EOF>

为了使我的语法不接受字符串123abc,我应该修改什么?

1 个答案:

答案 0 :(得分:2)

您的词法分析器会产生正确的结果。

这类错误应在解析器而不是词法分析器中处理。您是否有一个解析器规则接受INT_LITERAL后跟ID?我想你不会。让解析器完成其工作。如果缺少该规则,则将引发您期望的错误,但仅在解析阶段,而不是词法分析。