Подтвердить что ты не робот

Выбор анализатора Haskell

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

4b9b3361

Ответ 1

У вас есть несколько хороших вариантов.

Для легкого разбора типов String:

Для упакованного синтаксического анализа, например. HTTP-заголовки.

Для реальных двоичных данных большинство людей используют либо:

  • binary - для ленивого разбора двоичных файлов
  • cereal - для строгого двоичного разбора

Главный вопрос, который вы задаете себе, - это тип базовой строки?

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

Второй вопрос: спросить: у меня уже есть грамматика для типа данных? Если это так, я могу просто использовать счастливые

И, очевидно, для пользовательских типов данных существует множество хороших существующих парсеров:

Ответ 2

Просто добавьте в сообщение Don: Лично мне очень нравится Text.ParserCombinators.ReadP(часть базы) для бессмысленных быстрых и простых вещей. Особенно, когда Parsec кажется излишним.

Существует версия библиотеки bytestringreadp для версии bytestring, но она не охватывает Char8 bytestrings, и я подозреваю, что attoparsec будет лучшим выбором на данный момент.

Ответ 3

Недавно я преобразовал код из Parsec в Attoparsec. Оба они вполне способны.

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

Ответ 4

Bryan OSullivans сообщение в блоге Что в парсере? Attoparsec rewired (2/2) содержит хороший сравнительный тест производительности, сравнивающий несколько реализаций, а также некоторые комментарии, сравнивающие использование памяти.