Как создать исключение в методах посетителя antlr4? - PullRequest
0 голосов
/ 19 марта 2019

Я использую метод посетителя для оценки кода при его анализе.Для вызовов функций я хочу обработать операторы return, чтобы метод visitor для правила оператора return выбрасывал пользовательское исключение ReturnException.Это делается для того, чтобы в методе посетителя для вызова функции он мог перехватить оператор возврата исключения и вернуть возвращаемое значение, которое я сохранил в объекте исключения.Тем не менее, я получаю ошибку, когда я помещаю попытку try в мою функцию VisitReturnStatement, которую я переопределяю из класса BaseVisitor:

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 голосов
/ 19 марта 2019

Вы не можете выбросить отмеченные исключения из методов посетителя, потому что интерфейс посетителя не объявляет никаких исключений.Ваши единственные варианты - изменить исключения для исключения, расширив RuntimeException, обернуть ваши исключения в RuntimeException s или реструктурировать свой код, чтобы не использовать исключения.

...