Обнаружение ошибок / Восстановление в YACC / Bison - PullRequest
3 голосов
/ 28 февраля 2012

Я читал руководства по использованию символа ошибки, yyerrok и т. Д. Меня интересует, как добавить правила ошибок в анализатор, не переусердствовав или не добавив достаточно.

Есть ли общие рекомендации, которым я должен следовать, учитывая, что я буду разбирать упрощенную Java-программу? Каждое правило должно содержать обнаружение / восстановление ошибок? Есть ли самый простой подход, который оказывается опытным в выполнении этих задач? Сейчас я ищу только синтаксические ошибки.

Спасибо за любые / все ответы заранее.

1 Ответ

3 голосов
/ 28 февраля 2012

Как правило, вы хотите использовать правила восстановления после ошибок в файле yacc / bison.Лучше иметь только одно или два правила ошибок верхнего уровня, а не множество правил ошибок в конечных продуктах, поскольку на самом деле правильная повторная синхронизация в листовом праве очень трудна.

Самый простой подход для языка, похожего на Javaдолжно иметь просто правило вроде:

BlockStatement: error ';'

В этом случае, если вы получите какую-либо синтаксическую ошибку при синтаксическом анализе оператора, синтаксический анализатор просто выбросит входные токены, пока не достигнет ;и действовать так, как будто он только что завершил утверждение.Это работает адекватно для ошибок, ДРУГИХ, чем отсутствующий ; в конце блока.

...