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;
,这意味着我需要捕获所有可能的异常。
任何想法??