2008-11-21 13 views
13

Estoy buscando una buena biblioteca de análisis ocaml que no sea un derivado de flex/bison. Idealmente, me gustaría una biblioteca de combinador monádico a lo largo de las líneas de parsec, pero no puedo encontrar nada.¿Un buen analizador de ocaml?

Usaría haskell, pero hacer bindings de llvm para haskell es más agotador de lo que pensaba originalmente.

Saludos,

Duane

+0

¿Desea un analizador para OCaml como lenguaje de entrada, o un generador de analizadores con OCaml como lenguaje de implementación/ –

+0

hi duane, como alguien interesado en lo mismo, me gustaría saber si encontró una biblioteca decente en el final, y cómo funcionó para usted. –

Respuesta

11

Here's one library, a través de Google. (Que también criados this y this, que enumera varias bibliotecas que suena más relevantes.)

Cuando escribí un analizador combinador en ML, resultó bastante engorroso de usar debido a la restricción de valor y evaluación ansiosos, lo que obligó usted a eta-expande sus reglas de gramática. Sin embargo, se dice que Ocaml está más relajado con respecto a la restricción del valor: tal vez te ahorres algo de ese dolor.

+0

No soy un combinador analizador novato, pero parece que FParsec no lo obliga a expandir eta (y F # tiene restricción de valor y evaluación entusiasta). Por favor corrígeme si estoy equivocado. Gracias. –

+0

IIRC esto produjo producciones recursivas o mutuamente recursivas. No todo se expresa naturalmente en una estrella Kleene. Sin embargo, hace más de una década que hice esto, es difícil recordar los problemas. –

+1

@Mauricio: F # tiene la noción de mónada de expresiones de cálculo; esta jiggy-wiggy sintáctica le permite ocultar todo lo desagradable. –

3

En el mundo OCaml, stream-based parsers y Camlp4 son las siguientes dos alternativas más comunes. Ambos han sido descritos en detalle en artículos anteriores OCaml Journal.

Los combinadores de analizadores monádicos son comparativamente raros en OCaml, en gran parte porque hay varias bibliotecas de alto nivel y mucho más eficientes disponibles.

+0

Estoy aprendiendo acerca de los combinadores de analizadores. Cuando dices "varias bibliotecas de alto nivel y mucho más eficientes disponibles", ¿a qué te refieres? Gracias. –

+0

Además, ¿cómo se compararían con FParsec? –

+1

Me refiero a camlp4, ocamllex, ulex, ocamlyacc, dpygen, menhir, ocfgc, aurochs y otros. Descubrí que ocamllex y ocamlyacc eran generalmente mucho más rápidos en el análisis que cualquier otro disponible para F # como fslex, fsyacc y FParsec. –