У меня есть синтаксический анализатор, который был написан с помощью Scala RegexParsers
- ссылка
У него были некоторые серьезные проблемы с производительностью при анализе грамматики с глубоко вложенными выражениями. Поэтому я создал версию, в которой я смешиваю ссылку Scala PackratParsers
-
Версия Packrat не имеет такой же производительности и корректно анализирует грамматику. Однако, когда я предоставляю неверную грамматику для тестирования, например. this
Старый (непакетный) синтаксический анализатор, используемый для правильного сообщения об ошибке "Неверное правило", через комбинатор парсера ошибок | failure("Invalid rule")
здесь - ссылка
При использовании версии packrat-parser, если я включаю трассировку, я вижу на трассе, что сбой создается так же, как и в непакетной версии, однако PackratParser, похоже, игнорирует это и всегда возвращает failure: Base Failure
вместо этого.
Есть ли что-то другое в обработке ошибок при использовании PackratParsers, которые мне нужно понять?