如何在antlr4访问者方法中引发异常?

时间:2019-03-19 19:17:17

标签: java exception antlr antlr4

我正在使用visitor方法来评估解析后的代码。 对于函数调用,我想通过让return语句规则的visitor方法抛出自定义异常ReturnException来处理return语句。 这样,在函数调用的visitor方法中,它可以捕获return语句异常并返回我保存在异常对象中的返回值。 但是,将try catch放入从BaseVisitor类覆盖的VisitReturnStatement函数中时,会出现错误:

try { 
        throw new ReturnStatementException("Return statement", retValue); 
    } 
    catch(ReturnStatementException e) { 
        System.out.println("Return statement exception caught"); 
        throw e;
    } 

错误:error: unreported exception ReturnStatementException; must be caught or declared to be thrown throw e;

我认为这是因为我没有在方法中声明的异常,例如:

@Override 
public Value visitReturnStatement (CalculatorParser.ReturnStatementContext ctx) throws Exception {...}

但是,如果我添加throws Exception,则会收到错误消息Exception Exception is not compatible with throws clause in CalculatorBaseVisitor<Value>

1 个答案:

答案 0 :(得分:0)

您不能从visitor方法中引发检查的异常,因为visitor接口没有声明任何引发的异常。唯一的选择是通过扩展Value来更改要取消检查的异常,将异常包装在pandas中或重新组织代码以不使用异常。