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
的解析器规则?我想你不知道。让解析器完成它的工作。如果缺少规则,将抛出您预期的错误,但仅在解析阶段,而不是词法分析阶段。
在 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
的解析器规则?我想你不知道。让解析器完成它的工作。如果缺少规则,将抛出您预期的错误,但仅在解析阶段,而不是词法分析阶段。