2013-08-03 2 views
9

Я читал много о Haskell комбинаторы синтаксического анализа и нашел много тем, как:Haskell Parser Комбинаторы

Но все эти темы сравниваются Parser Combinators с Parser Generators.

Я хочу спросить вас, какие из Parser Combinator костюмов лучших следующие условий:

  1. Я хочу, чтобы иметь хороший контроль над об ошибках (включая исправление ошибок) и сообщения для пользователя
  2. Я хочу чтобы иметь возможность кормить синтаксический анализатор небольшими частями текста (не весь файл сразу)
  3. Я хочу, чтобы у меня была возможность правильно переработать грамматику (в настоящее время я разрабатываю грамматику, так что «хороший ваф работы» важен "
  4. Окончательный парсер должен быть быстрым (производительность важна, но не такая, как точки 1-3).

Я обнаружил, что наиболее популярные комбинаторы синтаксического анализа являются:

+0

Я знаю только парсек, который является монадическим синтаксическим анализатором. Он довольно прост в использовании, и у вас есть хороший контроль над ошибками. – Jocke

+3

Я использовал только 'attoparsec', поэтому я не знаю из первых рук о Parsec. attoparsec имеет репутацию чрезвычайно быстрого, но не очень хорошего в сообщениях об ошибках. Он нацелен на необходимость анализа партитуры на заднем контенте, что пользователь переднего конца никогда не должен видеть сообщения об ошибках. – asm

+0

@AndrewMyers, я согласен, я использовал attoparsec для такого рода вещей, и это очень быстро и просто (особенно для простых-иш-грамматик). В нем нет большого количества необычных функций, таких как обычная библиотека parsec для хакера, но она поддерживает «Text», который является удивительным. – Wes

ответ

3

Я бы сказал определенно пойти с Parsec, Heres почему:

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

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

И наконец, Parsec был почти дольше и обладает множеством полезных и расширенных функций. Это означает, что общая ремонтопригодность будет проще, больше примеров в Parsec, и больше людей знакомы с ней. uu-parsinglib определенно стоит времени для изучения, но я бы предположил, что знакомство с Parsec первым - лучший курс по этим причинам. (Алекс также самый рекомендуемый лексер для использования с Parsec или иным образом, но я не использовал его сам.)

+0

Хорошая точка. Я удалил свою половину разговора. Это сообщение саморазрушится через пять секунд, даст или займет день. – AndrewC

Смежные вопросы