Steve Steiner корректен, который исключение порождает в antlr библиотеке, проходя через mTokens () метод и будучи пойманным в antlr библиотеке. Проблема состоит в том, что этот метод автоматически генерируется antlr. Поэтому любые изменения для обрабатывания исключения в mTokens () будут перезаписаны когда Ваш генерировать классы синтаксического анализатора/лексического анализатора.
По умолчанию, antlr зарегистрирует ошибки и попытается восстановить парсинг. Можно переопределить это так, чтобы parser.prog () выдал исключение каждый раз, когда с ошибкой встречаются. От Вашего примера кода я думаю, что это - поведение, которое Вы ожидали.
Добавляют этот код к Вашему grammer (.g) файл. Необходимо будет также выключить, "Включают Просто Мой Код" в меню отладки.
@members {
public override Object RecoverFromMismatchedSet(IIntStream input,RecognitionException e, BitSet follow)
{
throw e;
}
}
@rulecatch {
catch (RecognitionException e)
{
throw e;
}
}
Это - моя попытка версии C# примера, данного в "Выходе из устройства распознавания на первой ошибке" глава "Категорической Ссылочной" книги ANTLR.
Hope это - то, что Вы искали.
Если я правильно понимаю, что вы пытаетесь сделать, то, к сожалению, это невозможно.
die ();
остановит выполнение скрипта в этой точке откуда он называется.
Вы также можете задать свой вопрос на своем родном языке, и кто-нибудь из присутствующих сможет перевести его для вас. Просто сделайте все возможное, чтобы задать вопрос на английском, и укажите ниже свой родной язык.
Если вы хотите проверить, успешно ли произошло включение, вы можете проверить возвращаемое значение самой функции include:
// http://us3.php.net/manual/en/function.include.php Example #4
if ((include 'file1.php') != 'OK') {
die();
}
Вы также можете рассмотрите require () вместо include () в зависимости от ваших потребностей:
require () идентичен include (), за исключением того, что в случае сбоя он также приведет к фатальному E_ERROR ошибка уровня. Другими словами, он остановит скрипт, тогда как include () выдает только предупреждение ( E_WARNING ), которое позволяет скрипту продолжить работу.
die ()
- это просто выход с ошибкой, можно ' Включайте в него файлы, и я не совсем понимаю, зачем вам это нужно. Не могли бы вы подробнее рассказать о том, чего вы пытаетесь достичь?