parsing scala haskell parsec parser-combinators

parsing - ¿Cómo se comparan los combinadores de analizador de Scala con el Parsec de Haskell?



parser-combinators (2)

He leído que los combinadores de analizador Haskell (en Parsec) pueden analizar gramáticas sensibles al contexto. ¿Esto es también verdad para los combinadores del analizador de Scala? Si es así, ¿es para esto que sirve la función "into" (aka ">>")?

¿Cuáles son algunas de las fortalezas / debilidades de la implementación de Scala de los combinadores de analizadores, frente a los de Haskell? ¿Aceptan la misma clase de gramáticas? ¿Es más fácil generar mensajes de error o hacer otras cosas útiles varias con una u otra?

¿Cómo encaja el análisis de packrat (introducido en Scala 2.8) en esta imagen?

¿Existe una página web o algún otro recurso que muestre cómo diferentes operadores / funciones / DSL-sugar de la implementación de un idioma se asignan a los de la otra?


También está el siguiente informe técnico:

Analizadores combinados en Scala

Los combinadores de analizadores son conocidos en lenguajes de programación funcionales como Haskell. En este documento, describimos cómo se implementan como una biblioteca en Scala, un lenguaje funcional orientado a objetos. Gracias a la sintaxis flexible de Scala, podemos aproximarnos mucho a la notación EBNF soportada por generadores de analizadores dedicados. Para los no iniciados, primero explicamos el concepto de combinadores de analizadores desarrollando una biblioteca mínima desde cero. Luego pasamos a una descripción detallada de la biblioteca Scala existente, que incluye su soporte para denotar el enlace de variables como parte de la sintaxis. Proporcionamos varios ejemplos realistas para ilustrar la utilidad de nuestra biblioteca.

report.pdf (324K)


Tienes muchas preguntas!

Comparando parsec (que es solo una de las muchas bibliotecas combinadoras del analizador de Haskell) con la implementación de Scala de parsec

Nadie ha hecho comparaciones aquí, ya que el código de Scala es bastante nuevo, pero verifique la documentación:

Tenga en cuenta que Haskell tiene muchas otras bibliotecas combinadoras de analizadores, si está interesado en este enfoque, por ejemplo

¿Cuáles son algunas de las fortalezas / debilidades de la implementación de Scala de los combinadores de analizadores, frente a los de Haskell?

El código de Haskell tiene más de una década de antigüedad, está bien comprendido y hay muchos ejemplos, mucha documentación y casos de usuarios. Las cosas de Scala son relativamente nuevas.

análisis de paquete

El análisis de packrat es completamente diferente. El paquete de papel original fue desarrollado en Haskell, pero desde entonces se ha vuelto más generalizado.

¿Existe una página web o algún otro recurso que muestre cómo diferentes operadores / funciones / DSL-sugar de la implementación de un idioma se asignan a los de la otra?

No, pero eso sería genial. Sin embargo, casi todas las bibliotecas combinadoras de analizador (?) Se basan en la implementación pionera de parsec, por lo que comparten mucho con el parsec original.