在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
,我应该修改什么?
答案 0 :(得分:2)
您的词法分析器会产生正确的结果。
这类错误应在解析器而不是词法分析器中处理。您是否有一个解析器规则接受INT_LITERAL
后跟ID
?我想你不会。让解析器完成其工作。如果缺少该规则,则将引发您期望的错误,但仅在解析阶段,而不是词法分析。