我实施了自己的访客。在我的一个VisitXXX覆盖中,我可能不得不根据某种情况中止整个访问。
建议的方法是什么?显然我可以抛出并抓住它,但我想知道这是否会让事情处于一种奇怪的状态?
答案 0 :(得分:1)
扔掉然后抓住它。您需要展开堆栈,这是最简单的方法,即使它不是漂亮。但这就是ANTLR在需要回溯时在幕后实际做的事情。
请确保使用您自己的异常类型,以便不会将错误解释为真正的异常。
至于州,访客对象没有保留,所以没有必要担心。看看访问者的源代码,那里没有隐藏的陷阱。只要你的代码没有在可能被破坏的地方引入某个状态,你就可以了。