基本的に、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]+ ;