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?
Réponses
Trop de publicités?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:
La principale question à se poser est qu'est-ce que le sous-jacent type de chaîne?
- Chaîne?
- bytestring (strict)?
- bytestring (paresseux)?
- unicode texte
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:
- XML
- CSV
- JSON
- flux rss/atom
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.
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.