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

Antlr4 mismatch input (partial match)

在 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 和 float 文字正则表达式的末尾添加 EOF

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

但即便如此我仍然得到一些部分解析结果

bc
<EOF>

我应该修改什么以使我的语法不接受字符串 123abc

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

这种类型的错误应该在解析器中处理,而不是词法分析器。您是否有接受 INT_LITERAL 后跟 ID 的解析器规则?我想你不知道。让解析器完成它的工作。如果缺少规则,将抛出您预期的错误,但仅在解析阶段,而不是词法分析阶段。