Scala PackratParser игнорирует анализатор сбоев

У меня есть синтаксический анализатор, который был написан с помощью Scala RegexParsers - ссылка

У него были некоторые серьезные проблемы с производительностью при анализе грамматики с глубоко вложенными выражениями. Поэтому я создал версию, в которой я смешиваю ссылку Scala PackratParsers -

Версия Packrat не имеет такой же производительности и корректно анализирует грамматику. Однако, когда я предоставляю неверную грамматику для тестирования, например. this

Старый (непакетный) синтаксический анализатор, используемый для правильного сообщения об ошибке "Неверное правило", через комбинатор парсера ошибок | failure("Invalid rule") здесь - ссылка

При использовании версии packrat-parser, если я включаю трассировку, я вижу на трассе, что сбой создается так же, как и в непакетной версии, однако PackratParser, похоже, игнорирует это и всегда возвращает failure: Base Failure вместо этого.

Есть ли что-то другое в обработке ошибок при использовании PackratParsers, которые мне нужно понять?

Ответ 1

Кажется, вам нужно использовать err("Invalid rule") вместо failure, так как это гарантирует, что не будет выполняться обратный поиск.