Что такое метод устранения ошибок ANTLR3?
Это кажется теоретическим вопросом.
Насколько я знаю, ANTLR3 самостоятельно обрабатывает ошибки, используя метод восстановления (###). Я хочу знать, что метод ANTLR3 использует для восстановления после ошибок. (то есть режим паники / уровень фразы и т. д.) Может кто-нибудь помочь мне разобраться в этом?
Было бы хорошо, если бы кто-то мог показать мне объявление метода восстановления, если моя первая догадка верна. Спасибо.
1 ответ
Цитата:
Механизм исправления ошибок ANTLR основан на ранних идеях Никлауса Вирта в "Алгоритмах + структуры данных = Программы 1" (а также в заметке Родни Топора об исправлении ошибок в анализаторах рекурсивного спуска 2), но также включает в себя хорошие идеи Джозефа Гроша из его генератора синтаксического анализатора CoCo (Efficient и Удобное восстановление после ошибок в парсерах рекурсивного спуска 3). По существу, распознаватели выполняют вставку и удаление одного символа при несовпадающих ошибках символов (как описано ниже), если это возможно. Если нет, распознаватели сожирают символы до тех пор, пока просмотр не станет членом набора ресинхронизации, а затем выйдут из правила. Набор повторной синхронизации - это набор входных символов, которые могут юридически следовать ссылкам на текущее правило и ссылкам на любые вызывающие правила в цепочке вызовов. Точно так же, если распознаватель не может выбрать ни одну из альтернатив из начала правила, распознаватель снова использует стратегию gobble-and-exit.
[...]
- Теренс Парр. Полное руководство по ANTLR, 10.7 Стратегия автоматического восстановления после ошибок.
Рекомендации
1 Никлаус Вирт. Алгоритмы + структуры данных = программы. Prentice Hall PTR, Аппер-Седл-Ривер, Нью-Джерси, США, 1978.
2 Родни В. Топор. Замечание по исправлению ошибок в парсерах рекурсивного спуска. SIGPLAN Нет. 17 (2): 37–40, 1982.
3 Йозеф Грош. Эффективное и удобное исправление ошибок в парсерах рекурсивного спуска. Структурное программирование, 11(3):129–140, 1990.