2016-07-19 6 views
0

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

Я изучал класс Grako Semantics, чтобы внести некоторые проверки, которые отображали бы более эффективные сообщения об ошибках, если проверки не выполняются, но также кажется, что может быть множество случаев кросс, которые должны быть указаны, чтобы иметь возможность поймать все возможные пути, по которым синтаксический разбор правила может завершиться неудачей.

Есть ли у кого-нибудь какие-либо рекомендации или примеры, которые я могу просмотреть?

+0

См. [Этот ответ] (http://stackoverflow.com/questions/29044806/do-i-have-a-bug-in-my-grammar-or-the-parser-generation-tool/29051357) – Apalala

ответ

2

Парсер PEG исчерпывает все варианты, иногда оставляя вас сбой, соответствующий последнему и наименее вероятному варианту.

С Grako, вы можете добавить отрезок элементов (~) к грамматике, чтобы парсер совершить определенные варианты, когда он может быть уверен, что они являются теми, чтобы соответствовать.

term = '(' ~ expression ')' | int ; 

Элементы вырезания также обрезают кеш memoization, что улучшает производительность анализатора.