Haskell Parser Combinators

10

Ich habe viel über Haskell Parser Combinators gelesen und eine Menge Themen gefunden wie:

Aber alle diese Themen vergleichen Parser Combinators mit Parser Generators .

Ich möchte Sie fragen, welche von Parser Combinator am besten zu folgenden Bedingungen passt:

  1. Ich möchte eine gute Kontrolle über die Fehler (einschließlich Fehlerbehebung) und Nachrichten für Benutzer
  2. haben
  3. Ich möchte den Parser mit kleinen Teilen Text (nicht ganze Datei auf einmal) füttern
  4. Ich möchte die Grammatik gut umgestalten können (ich entwickle gerade die Grammatik, also ist "nettes Arbeiten" wichtig "
  5. Der letzte Parser sollte schnell sein (die Leistung ist wichtig, aber nicht so viel wie Punkt 1-3).

Ich habe herausgefunden, dass die beliebtesten Parser-Kombinatoren sind:

Wojciech Danilo 03.08.2013, 01:05
quelle

2 Antworten

3

Ich würde sagen definitiv gehen mit Parsec, warum warum:

Attoparsec wurde entwickelt, um schnell verwendet zu werden, aber es fehlt die starke Unterstützung für Fehlermeldungen, die Sie in Parsec erhalten, also ist das ein Gewinn für Ihren ersten Punkt.

Meine Erfahrung mit Parser-Kombinator-Bibliotheken besteht darin, dass es sehr einfach ist, einzelne Teile des Parsers entweder in GHCi oder in Tests zu testen, sodass der zweite Punkt von allen wirklich erfüllt wird. Schließlich sind Attoparsec und Parsec ziemlich verdammt schnell.

Schließlich ist Parsec am längsten dabei und hat viele nützliche und fortgeschrittene Funktionen. Dies bedeutet, dass die allgemeine Wartbarkeit einfacher wird, mehr Beispiele in Parsec vorhanden sind und mehr Menschen damit vertraut sind. uu-parsinglib ist definitiv die Zeit wert, um sie zu erforschen, aber ich würde vorschlagen, dass Parsc zuerst aus diesen Gründen der bessere Kurs ist. (Alex ist auch der am meisten empfohlene Lexer, um mit Parsec oder anders zu verwenden, aber ich habe es selbst nicht benutzt.)

    
Vic Smith 05.08.2013, 16:23
quelle
0

Ich werde meine Antwort hier posten, falls jemand diese Frage findet. Die aktuelle Antwort ist ziemlich veraltet.

Es ist besser, das Paket megaparsec als Parser-Kombinatorbibliothek zu verwenden. Es ist eine moderne produktionsfertige Bibliothek. Und sein README.md enthält einen ausgezeichneten Vergleich mit anderen Parser-Kombinator-Bibliotheken:

Shersh 02.04.2018 12:04
quelle