ANTLR не выдает ошибки при недопустимом вводе

Я использую ANTLR для синтаксического анализа логических выражений в написанном мной инструменте Java, и у меня возникают проблемы из-за передачи недопустимых входных строк в сгенерированный лексер и парсер ANTLR не вызывает исключений. Вместо того, чтобы генерировать исключение RecognitionException, как я ожидал, сгенерированные файлы просто выводят сообщение об ошибке на консоль и возвращаются, как если бы ошибок не было, в результате моя программа вылетала из строя, когда позже она сталкивалась с пустыми данными.

Я использовал ANTLRWorks версии 1.4.3, чтобы сгенерировать файлы, и кажется, что должна быть какая-то опция, чтобы он действительно выдавал ошибки, а не печатал на консоли, но я ничего не нашел. Кто-нибудь знает, как заставить ANTLR действительно выдавать сообщения об ошибках? Я видел, что та же проблема в C # была решена с помощью более старой версии ANTLR, это то, что мне нужно сделать?

РЕДАКТИРОВАТЬ: После того, как Барт указал мне в том направлении, которое я искал, я нашел эту страницу

https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3

, чей раздел «Обработка ошибок» содержал код, более точно делающий то, что я хочу. Чтобы изменить способ, которым ANTLR перехватывает исключения, вы можете указать это в файле грамматики:

@rulecatch {
   catch (RecognitionException e) {
    throw e;
   }
}

Это заставляет ANTLR генерировать исключение вместо того, чтобы обрабатывать его и восстанавливать. В этом разделе также есть кое-что о переопределении функций несоответствия и восстановления, чтобы убедиться, что выбрасываются все возможные исключения.

14
задан Kevin Alex Mathews 3 November 2016 в 20:25
поделиться