基本上,我已经扩展了 BaseErrorListener,我需要知道错误什么时候是语义错误,什么时候是句法错误。因此,我希望以下内容给我一个失败的谓词异常,但我得到的是一个NoViableAltException
(我知道计数正在工作,因为我可以打印出 的值things
,而且它是正确的)。有没有办法让我重新做我想做的事?在下面的示例中,如果我们没有以 6 结尾,我希望有一个失败的谓词异常things
。
grammar Test;
@parser::members {
int things = 0;
}
.
.
.
samplerule : THING { things++; } ;
.
.
.
// Want this to be a failed predicate instead of NoViableAltException
anotherrule : ENDTOKEN { things == 6 }? ;
.
.
.
我已经通过以下方式正确地获得了失败的谓词异常(对于不同的场景):
somerule : { Integer.valueOf(getCurrentToken().getText()) < 256 }? NUMBER ;
.
.
.
NUMBER : [0-9]+ ;