Pregunta

Tengo una idea para un proyecto de hobby que realiza algún análisis y manipulación de código.Este proyecto requerirá los árboles de sintaxis concretos y abstractos de un archivo fuente determinado.Además, serían útiles las referencias bidireccionales entre los dos árboles.Me gustaría evitar el trabajo de transcribir una gramática para construir mi propio lexer y analizador.

¿Existe un formato estándar para describir árboles de sintaxis concretos o abstractos?¿Alguna cadena de herramientas ampliamente utilizada admite la salida a estos formatos?

No tengo en mente un lenguaje de programación de destino en particular.Cualquier popular servirá como prototipo, pero prefiero uno que conozca bien:Python, C#, Javascript o C/C++.

Me gustaría poder ejecutar un archivo fuente a través de una herramienta o biblioteca y recuperar ambos árboles.En un mundo ideal, sería práctico ejecutar esta herramienta en código mientras lo edita un usuario y ser tolerante con los errores.Nuevamente, simplemente estoy tratando de desarrollar un prototipo, por lo que estos requisitos son bastante laxos.

¡Gracias!

¿Fue útil?

Solución

nuestro proyecto hemos definido el metamodelo AST en UML y utilizamos antlr (Java) para rellenar el modelo. También mantenemos la información del identificador de antlr después del análisis, pero todavía no hemos tratado de actualizar el archivo de texto subyacente con las modificaciones realizadas en el modelo.

Esto tiene una sobrecarga horrible (en infraestructura, como Eclipse UML2 / EMF), pero nuestro objetivo es utilizar herramientas de alto nivel para los / Desarrollo impulsado basado en modelos (MDD, MDA) de todos modos, así que decidimos usarlo en cada nivel.

Creo que uno de nuestros estudiantes, una vez jugado con OpenArchitectureWare y logró que los cambios de la basado en Eclipse , generado editor de nuevo en el árbol de sintaxis (no relacionado con el modelo UML arriba) de forma automática, pero no sé los detalles acerca de esto.

También puede ser que desee mirar a gramáticas de árboles de ANTLR.

Otros consejos

La comunidad de investigación decidió que el intercambio gráfico que era lo correcto a hacer cuando se mueve la información de una herramienta de análisis de programa a otro. Ver http://www.gupro.de/GXL

Más recientemente, el OMG ha definido un estándar para el intercambio de sintaxis abstracta árboles. Ver http://www.omg.org/spec/ASTM/1.0/Beta1/

Este problema parece que se resolvió una y otra vez. Hay media docena de propuestas "bus" de herramientas hechas en los últimos años que toda resuelto, con nadie superando la industria. El problema es que a) es fácil representar mediante AST cualquier tipo de notación encajable [paréntesis, como LISP,  como XML, ...] para que la gente rodar su propia solución fácil, y b) para una herramienta para el intercambio de un AST con otra, se ambos tienen que estar de acuerdo esencialmente en lo que significan los nodos AST; pero la mayoría de AST son más bien derivan accidentalmente de lo particular gramática / tecnología de análisis utilizado por cada herramienta, y hay casi siempre desacuerdo acerca de que entre las herramientas. Por lo tanto, he visto muy pocas herramientas que AST cambio significativo.

Si estás haciendo una cosa manía, me quedo con un ceceo parecido codificación de árboles, donde cada nodo tiene el siguiente formato:     (...) Su fácil de generar, y de fácil lectura.

Yo trabajo en un profesional para manipular programas . Si nosotros se imprima la AST, que hacemos lo anterior. sobre todo individuo AST son demasiado complicadas para mirar en la práctica, así que casi nunca imprimimos a cabo toda la AST, a lo sumo un nodo y unos pocos niños de profundidad. Nuestra herramienta no intercambia AST con nadie (véase más arriba razones :) pero hace exactamente bien la construcción de ésta en la memoria, hacer las cosas con ella whizzy por razones de análisis o razones de transformación, y luego o bien simplemente se deleteing (sin necesidad de enviar a cualquier parte) o regenerar el texto original del árbol. [Esto último significa que necesita anti-análisis o "prettyPrinting" tecnología]

Se esperan normas específicas, aunque también pueden ser apropiadas normas de propósito más general.Ira Baxter ya mencionó GXL, y RDF También se puede agregar, solo que requeriría una ontología apropiada y está más orientado a la semántica que a la sintaxis.Todavía puede ser una opción para investigar.

Para estándares específicos, Ira Baxter ya mencionó ASTM, otro, aunque más bien se dirige a un tipo específico de lenguaje de programación (lenguajes lógicos), es un estándar para gráficos semánticos/conceptuales, conocido como ISO-IEC 24707 2007.

No es un estándar en sí mismo, sino un documento sobre ese tema: Hacia representaciones de código fuente portátiles utilizando XML.

No conozco ningún estándar que se utilice eficazmente (en este ámbito siempre se cocina en casa en todas partes), pero a mí también me interesa este tema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top