Улучшение вывода ошибок сгенерированным Grako парсером

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

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

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

1 ответ

Решение

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

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

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

Вырезанные элементы также сокращают кэш-память, что повышает производительность анализатора.

Другие вопросы по тегам