Hay muchos productos de código abierto parser implementations 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?Elegir un analizador Haskell
Respuesta
Tiene muchas buenas opciones.
Para el análisis de peso ligero de tipos de cadena:
Para el análisis sintáctico cadena de bytes para llevar, por ejemplo, de HTTP headers.
Para los datos binarios reales la mayoría de la gente usa ya sea:
El principal pregunta que debe hacerse es ¿cuál es el tipo de cadena subyacente?
- Cadena?
- bytestring (estricto)?
- bytestring (flojo)?
- Unicode text
Esa decisión, que determina en gran medida el conjunto de herramientas analizador que va a utilizar.
La segunda pregunta es: ¿ya tengo una gramática para el tipo de datos?Si es así, sólo puede utilizar feliz
Y, obviamente, para los tipos de datos personalizados hay una variedad de buenos programas de análisis existentes:
Sólo para añadir al mensaje de Don: Personalmente, me gusta bastante Text.ParserCombinators.ReadP (parte de base) sin sin sentido cosas rápidas y fáciles. Particularmente cuando Parsec parece excesivo.
Hay una biblioteca bytestringreadp para la versión de bytes, pero no cubre las cadenas de caracteres Char8, y sospecho que attoparsec sería una mejor opción en este momento.
La publicación de blog de Bryan O'Sullivan What’s in a parser? Attoparsec rewired (2/2) incluye un buen punto de referencia de rendimiento que compara varias implementaciones junto con algunos comentarios que comparan el uso de la memoria.
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.
- 1. PNL Analizador en Haskell
- 2. Analizador de Haskell para AST
- 3. Analizador Haskell Parsec para encontrar [...]
- 4. ¿Qué analizador XML para Haskell?
- 5. Haskell - Analizador sintáctico de descenso recursivo
- 6. Analizador de CSV completo para Haskell?
- 7. Analizador de fecha Haskell y formateo
- 8. Prioridad y asociatividad del operador en un analizador (Haskell)
- 9. ¿Un buen analizador de ocaml?
- 10. ¿Cómo elegir el tipo de Haskell C correcto?
- 11. Nombreme un analizador binario. Un analizador de datos binarios
- 12. Analizador/Analizador para Erlang?
- 13. Escribir un analizador simple
- 14. Creando un Haskell REPL dentro de una aplicación Haskell
- 15. analizador
- 16. analizador SAX vs XMLPull analizador
- 17. Elegir un archivo en Python3
- 18. ¿Cómo elegir un contenedor DI?
- 19. ¿Cómo elegir un enlace WCF?
- 20. escribiendo un analizador rápido en python
- 21. Un simple XML C analizador
- 22. ¿Hay un analizador de Go?
- 23. Creando un analizador (Parte I)
- 24. construyendo un analizador con clang
- 25. ¿Cuándo debería usar un analizador?
- 26. NSOpenPanel elegir un directorio (no un archivo)
- 27. Escribir un intérprete Haskell en Haskell
- 28. Haskell: FRP Reactiva Parsec?
- 29. ¿Qué paquete de FRP elegir?
- 30. ¿Hay un EDSL haskell para escribir lexers?
gracias por la respuesta detallada – Keith
Fantástica respuesta, muchas gracias. – Litherum