Какова стратегия добавления ошибок в грамматику? - PullRequest
2 голосов
/ 04 мая 2011

Как обычно добавляются сообщения об ошибках?Я столкнулся с проблемой, заключающейся в том, что мои сообщения об ошибках слишком мелкие: когда синтаксический анализатор начинает выдавать состояния ошибок в операторе, он выскакивает, пока не достигнет обработки ошибок для раздела, в котором он находится, и выдает недопустимую ошибку.сообщение.

Является ли хорошей идеей просто добавить некоторую описательную ошибку к каждому нетерминалу?

1 Ответ

3 голосов
/ 05 мая 2011

Производство ошибок - это восстановление после ошибки, чтобы попытаться продолжить обработку ввода, а не печать разумных или полезных сообщений об ошибках. Поэтому их следует использовать в точках грамматики, где вполне вероятно, что вы сможете правильно распознать и повторно синхронизировать входной поток. Например, если ваш язык состоит из последовательности конструкций, заканчивающихся символами ;, хорошим производством ошибок будет что-то вроде construct: error ';', которое будет восстанавливаться после ошибок в construct (что бы это ни было), пропуская вперед в введите ; и попытайтесь продолжить оттуда.

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

...