parsing haskell

parsing - Elegir un analizador Haskell



(4)

Publicación de blog de Bryan O''Sullivan ¿Qué hay en un analizador? Attoparsec rewired (2/2) incluye un buen benchmark de rendimiento que compara varias implementaciones junto con algunos comentarios que comparan el uso de la memoria.

Hay muchas implementaciones de analizador de código abierto disponibles para nosotros en Haskell. Parsec parece ser el estándar para el análisis de texto y attoparsec parece ser una opción popular para el análisis binario, pero no sé mucho más que eso. ¿Existe un árbol de decisión particular que sigas para elegir una implementación de analizador? ¿Has aprendido algo interesante sobre las fortalezas o debilidades de las bibliotecas?


Recientemente convertí un código de Parsec a Attoparsec. Ambos son bastante capaces.

Attoparsec gana en rendimiento y memoria, pero Parsec proporciona mejores informes de errores y tiene una documentación más completa.


Solo para agregar a la publicación de Don: Personalmente, me gusta bastante Text.ParserCombinators.ReadP (parte de la base) para cosas rápidas y fáciles sin sentido. Particularmente cuando Parsec parece excesivo.

Hay una biblioteca bytestringreadp para la versión de bytes, pero no cubre cadenas de bytes Char8, y sospecho que attoparsec sería una mejor opción en este punto.


Tienes varias buenas opciones.

Para el análisis ligero de tipos de cadenas:

Para el análisis empaquetado de cadenas de bytes, por ejemplo, de encabezados HTTP .

Para datos binarios reales, la mayoría de la gente usa:

  • binary - para el análisis binario perezoso
  • cereal - para un análisis binario estricto

La pregunta principal que debe hacerse es: ¿cuál es el tipo de cadena subyacente?

Esa decisión determina en gran medida qué conjunto de herramientas del analizador utilizará.

La segunda pregunta es: ¿ya tengo una gramática para el tipo de datos? Si es así, puedo usar feliz

Y, obviamente, para los tipos de datos personalizados hay una variedad de buenos analizadores existentes: