31 votes

Le choix d'un analyseur Haskell

Il y a beaucoup de open source analyseur implémentations disponibles en Haskell. Parsec semble être la norme pour le texte d'analyse et de attoparsec semble être un choix populaire pour les binaires de l'analyse, mais je ne sais pas beaucoup au-delà. Est-il un arbre de décision que vous suivez pour le choix d'un analyseur de mise en œuvre? Avez-vous appris quelque chose d'intéressant sur les points forts ou les faiblesses de la bibliothèque?

51voto

Don Stewart Points 94361

Vous avez plusieurs bonnes options.

Pour la légèreté et l'analyse de la Chaîne types:

Pour les paniers bytestring de l'analyse, par exemple, des en-têtes HTTP.

Pour les données binaires réelles la plupart des gens utilisent soit:

  • binaire -- pour les paresseux binaire analyse
  • céréales -- d'une stricte binaire analyse

La principale question à se poser est qu'est-ce que le sous-jacent type de chaîne?

Cette décision déterminera en grande partie l'analyseur d'outils que vous allez utiliser.

La deuxième question à se poser est: ai-je déjà une grammaire pour le type de données? Si oui, je peux juste utiliser des heureux

Et évidemment, pour les types de données personnalisés il existe une variété de bonnes analyseurs:

11voto

Sam Martin Points 61

Juste pour ajouter à N'post: Personnellement, j'aime bien le Texte.ParserCombinators.ReadP (cadre de base) pour les no-nonsense rapide et facile des choses. En particulier lorsque Parsec semble exagéré.

Il y a un bytestringreadp bibliothèque pour le bytestring version, mais elle ne couvre pas Char8 bytestrings, et je soupçonne attoparsec serait un meilleur choix en ce moment.

4voto

Dan Dyer Points 30082

J'ai récemment converti du code de Parsec à Attoparsec. Les deux sont tout à fait capable.

Attoparsec victoires sur les performances et la mémoire, mais Parsec permet de mieux les rapports d'erreurs et a une documentation plus complète.

3voto

Keith Points 979

Bryan O'Sullivan blog de Ce qui est dans un analyseur? Attoparsec refaite (2/2) comprend une belle performance de référence de la comparaison de plusieurs implémentations avec quelques commentaires en comparant l'utilisation de la mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X