2012-09-18 17 views
6

Como un ejercicio para aprender Haskell (y torturarme a mí mismo), estoy considerando escribir un embellecedor de código Haskell configurable.Analizador de Haskell para AST

Se apoyará un archivo de configuración escrito en JSON o YAML (o algo mejor?) Que especifica opciones como la clasificación importaciones, clasificación/agrupamiento data y class declaraciones, el número de líneas entre las secciones, etc.

soy buscando un analizador sintáctico para Haskell 98 que genera un árbol sintáctico abstracto (AST) y retiene los comentarios. El análisis de GHC, con sus extensiones de idioma, será una ventaja.

En ausencia de tal cosa, creo que puedo escribir un analizador sintáctico de descenso recursivo o uno que use Parsec o un generador de analizador sintáctico. Tal vez hacer rodar el mío aumentará el aprendizaje (y la tortura :-)).

¿Hay un analizador Haskell-> AST completo disponible bajo una de las licencias de código abierto? Si hago algún progreso en este proyecto, lo pondré en github.

+0

Uno de mis peeves favoritos es el código feo. La mayor parte de mi trabajo está en Java y me sorprende cómo la gente puede verificar el código sin alineamiento de llaves, espaciado incoherente entre operadores, etc. ¿No leen su propio código? ¿No les molesta? Tal vez es mi TOC. De todos modos, estoy de acuerdo con que Haskell fuera de la caja es un orden de magnitud más agradable. Pero todavía quiero escribir un embellecimiento :-). – Ralph

+0

Sí. Realmente estaba bromeando, porque me gusta el tipo de cosas que estás sugiriendo. ¿Por qué no usar haskell para el idioma del archivo de configuración? Estoy seguro de que leí sobre alguien que evolucionó gradualmente en el lenguaje específico de dominio para la configuración hasta que se dieron cuenta de que solo querían a Haskell, pero [esto] (http://www.jmreardon.com/posts/2011-07-17-typesafe-config -in-haskell.html) es lo más cercano que pude encontrar. O puede usar el paquete [ConfigFile] (http://hackage.haskell.org/package/ConfigFile). – AndrewC

Respuesta

16

Hay un analizador disponible en el paquete haskell-src-exts. El analizador no solo analiza la mayoría de las extensiones de GHC; también reconoce extensiones comunes como literales XML sintácticos, etc. Debe usar la función parseModuleWithComments si también desea obtener acceso a la información de comentarios.

Tenga en cuenta, sin embargo, que los comentarios no se almacenan en el árbol de sintaxis real; se almacenan como una lista separada de comentarios con información de ubicación. Sería bastante trivial incluir los comentarios en el árbol, si realmente los necesita allí, al fusionar el árbol con la lista utilizando un algoritmo de fusión lineal (ambas secuencias se pueden considerar "ordenadas"). Los comentarios pueden incluso almacenarse junto con los nodos AST asociados, porque los AST "anotados" pueden contener metadatos arbitrarios en cada nodo (por defecto, solo SrcSpanInfo). La razón por la que esto no se ha hecho en el paquete haskell-src-exts real es presumiblemente porque el analizador AST se escribió antes del analizador de comentarios.

2

He escrito una herramienta súper simple que autoajusta el código Haskell. Lo hace mediante el uso de las funciones de impresión y bonito de impresión de haskell-src-exts. Puede encontrarlo en https://github.com/djv/small/blob/master/tidy.hs. Podría ser el comienzo de algo más flexible y poderoso.