Java antlr4 parsecancellationException игнорируется (решенная)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java antlr4 parsecancellationException игнорируется (решенная)

Сообщение Anonymous »

Решение:
Это обходной путь, но если вы храните логическое поле «Отмена» в вашем классе слушателей и, в верхней части любых методов выхода, проверьте это значение и бросьте исключение, если это правда, это Успешно бросает parsecancellationException. < /p>
Обратите внимание, что это должно быть сделано индивидуально для каждого выхода из выхода; ExteveryRule всегда выполняется после каждого правила. После встречи с ошибкой он пытается повторно повторно запустить метод посетителей, даже если вы установили Baireerrorstrategy или другую пользовательскую стратегию. Мое решение в качестве комментария ниже этого поста. < /p>

Я работаю над мини -компилятором, и я пытался бросить ParsecancellationException < /code> В классе Parselistener или аналогичном исключении, чтобы остановить анализ при столкновении с фатальной ошибкой, однако это просто игнорируется во время исполнения. Проанализировал исключение. Я также попытался бросить runtimeexceptions вместо этого, безрезультатно. > Кажется, успешно останавливает анализ.

Код: Выделить всё

 @Override
public void exitAddExpr(BasicLangParser.AddExprContext ctx) {
Util.Value left = stack.pop();
Util.Value right = stack.pop();

if (left.datatype==right.datatype) {
String result = switch (left.datatype) {
case INT, FLOAT -> String.valueOf((Double)left.getValue() + (Double)right.getValue());
case STRING, CHAR -> (String)left.getValue() + (String)right.getValue();
default -> throw new ParseCancellationException("Addition Error - Invalid Datatype ("+left.datatype.toString()+","+right.datatype.toString()+")");
};
stack.push(Util.Value.newValue(result));
} else {
throw new ParseCancellationException("Addition Error - Mismatched Datatypes ("+left.datatype.toString()+","+right.datatype.toString()+")");
}

super.exitAddExpr(ctx);
}

Поскольку этот код фактически бросает исключение, 12 -я строка Stack.push () не работает, и поэтому позже в своей программе я столкнулся с вышеупомянутым исключением пустого стека . < /p>
Редактировать:
Я в настоящее время не пытаюсь поймать parsecancellationException < /code> в моем коде на данный момент; Я просто поймал это исключение, используя отладчик IntelliJ и включил точки останова исключительных исключений.
Я не заблокировал распространение исключений в моем коде, хотя я не осознаю, делает ли Antlr4 это, отсюда и мой вопрос. < /p>
Единственное другое исключение - пойманное Исключение, где я пытаюсь проанализировать строку как двойной, чтобы определить, численная она.

Подробнее здесь: https://stackoverflow.com/questions/794 ... solved-ish
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java antlr4 parsecancellationException игнорируется
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Java antlr4 parsecancellationException игнорируется
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • (Решенная) Радиогруппа oblogroup с помощью кнопки в цикле
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • OpenAccessenhancer работает в VS2017 и VS2019, но не в VS2022 (решенная, но не понятая)
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • OpenAccessenhancer работает в VS2017 и VS2019, но не в VS2022 (решенная, но не понятая)
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»