基本上,我擴展了BaseErrorListener,並且我需要知道錯誤何時是語義以及何時是語法。所以我想要以下給我一個失敗的謂詞異常,但我得到一個NoViableAltException
而不是(我知道計數正在工作,因爲我可以打印出things
的值,它是正確的)。有沒有辦法讓我可以重新做它我想做的事?在我的下面的例子中,如果我們沒有結束6 things
,我希望那裏有一個失敗的謂詞異常。在ANTLR4中強制語義錯誤(失敗謂詞)
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]+ ;