1
我使用ANTLR3與C運行時阻塞。有沒有辦法來處理規則捕獲所有ANTLR異常類型[...]
我想要做一些自定義的錯誤處理。我真正追求的是,如果在子規則中存在任何類型的antlr匹配異常,我想告訴ANTLR跳過嘗試處理它,讓它滲透到更全局的規則。
在這條規則,我會記錄它,然後嘗試重新開始。
我設置像這樣的規則捕獲方法,使所有的規則將不會嘗試恢復。
@rulecatch
{
if (HASEXCEPTION())
{
PREPORTERROR();
}
}
這使我可以在我想要的規則中插入catch處理程序。
在我感興趣的規則,我可以再使用捕捉語法像這樣:
catch [ANTLR3_RECOGNITION_EXCEPTION]
{
PREPORTERROR();
RECOGNIZER->consumeUntil(RECOGNIZER,RCURLY);
CONSUME();
PSRSTATE->error = ANTLR3_FALSE;
PSRSTATE->failed = ANTLR3_FALSE;
}
的問題是,這種語法似乎只能讓我趕上一個類型的異常。我希望能夠捕獲所有異常類型。
有沒有辦法做到這一點?
我以爲我可以重載所有的恢復功能,但隨後一些代碼生成的異常,像這樣:
CONSTRUCTEX();
EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
EXCEPTION->message = (void *)"";
EXCEPTION->decisionNum = 23;
EXCEPTION->state = 0;
goto rulewhenEx;
,這意味着我需要捕獲所有可能的異常。
任何想法??