Что такое метод устранения ошибок ANTLR3? - PullRequest
0 голосов
/ 14 марта 2012

Это кажется теоретическим вопросом.

Насколько я знаю, ANTLR3 самостоятельно обрабатывает ошибки, используя метод восстановления (###). Я хочу знать, что метод ANTLR3 использует для восстановления после ошибок. (то есть режим паники / уровень фразы и т. д.) Может кто-нибудь помочь мне разобраться в этом?

Было бы неплохо, если бы кто-нибудь показал мне объявление метода восстановления, если моя первая догадка верна. Спасибо.

1 Ответ

2 голосов
/ 15 марта 2012

Цитата:

Механизм исправления ошибок ANTLR основан на ранних разработках Никлауса Вирта. идеи в алгоритмах + структуры данных = программы 1 (а также Замечание Родни Топора об исправлении ошибок в парсерах рекурсивного спуска 2 ), но также включает в себя хорошие идеи Йозефа Гроша из его CoCo Генератор парсера (Эффективное и удобное восстановление после ошибок sive Descent Parsers 3 ). По сути, распознаватели выполняют одно- вставка и удаление символов при несовпадающих ошибках символов (как описано через минуту) если возможно. Если нет, распознаватели сожрать сим- bols, пока lookahead не является членом набора ресинхронизации и затем выйдите из правила. Набор ресинхронизации - это набор входных символов которые могут юридически следовать ссылкам на текущее правило и ссылкам на любые правила вызова вверх по цепочке вызовов. Точно так же, если распознаватель не может выбрать любую из альтернатив в начале правила, распознаватель снова использует стратегию gobble-and-exit.

[...]

- Теренс Парр. Полная ссылка ANTLR , 10.7 Стратегия автоматического восстановления после ошибок.

Ссылки

1 Никлаус Вирт. Алгоритмы + структуры данных = Программы . Prentice Hall PTR, Upper Saddle River, Нью-Джерси, США, 1978.

2 Родни В. Топор. Замечание по исправлению ошибок в парсерах рекурсивного спуска. SIGPLAN Not. , 17 (2): 37–40, 1982.

3 Йозеф Грош. Эффективное и удобное исправление ошибок в парсерах рекурсивного спуска. Структурированное программирование , 11 (3): 129–140, 1990.

...