Java Antlr4在部分表达式上未失败

Java Antlr4在部分表达式上未失败,java,antlr4,Java,Antlr4,更新 解决方案如下: 我正在java中使用antlr4 我有一个.g4文件可以清理(我知道这样做没有意义) So-+-是一个有效的表达式: 但我希望这会出现一个错误: 我在visitErroNode上没有受到攻击,也没有任何例外。 如何/从何处获得表达式不完整的事实?antll给出正确答案,表示接受-+-。现在,也许它在数学上没有意义,但它是一个有效的表达式。 定义为:T终端,N-非U终端。 如果你把-作为VT罚款,那么由你决定。它不一定是一个数字。 但是在语义上,当处理AST(抽象语法树

更新 解决方案如下:

我正在java中使用antlr4

我有一个.g4文件可以清理(我知道这样做没有意义)

So-+-是一个有效的表达式:

但我希望这会出现一个错误:

我在visitErroNode上没有受到攻击,也没有任何例外。
如何/从何处获得表达式不完整的事实?

antll
给出正确答案,表示接受
-+-
。现在,也许它在数学上没有意义,但它是一个有效的表达式。 定义为
T终端,N-非U终端
。 如果你把
-
作为VT罚款,那么由你决定。它不一定是一个数字。 但是在语义上,当处理AST(抽象语法树)时,您必须知道
-
的行为是什么。
说other:
语法上
根据您的def确定(
antl
说这个),但当处理意味着语义上(如果对
-
进行适当处理也可以)。想象一下说
0
而不是
-

解析器将产生一个错误,但会在STDERR上发出该错误,并(尝试)恢复并继续解析。您要做的是覆盖默认错误侦听器:顺便说一句,如果链接的Q&A没有回答您的问题,请编辑您的问题并解释为什么它对您不起作用:然后我将重新打开此Q。不确定我是否理解您的意思,或者我在问题中不清楚。-+-是有效的,应该是。但是-+无效,因为它必须是-+-。我不明白的是,为什么在使用解析器+TreeWalker时没有出现错误。如果查看数学表达式,我想得到“4+”的一个错误,因为它缺少右侧操作数。-+无效,但ANTR可以构造部分AST(直到可以处理的无效输入结束)。现在,不确定如何看到输出错误(无效的语法分析)应该查看文档,或者检查重复的答案(据我在其他评论中看到的,只需重定向错误)。当解析输入时,构建AST(树)(即使在无效输入上…也可以访问)\语法分析。(错误->部分AST直到错误)处理AST意味着语义分析(成功解析输入后的第二步,意味着1+1->2)。如果需要,希望能有所帮助。。。
exp :
    num opr num;

opr :
    '+';

num :
    '-';