AST de código C [closed]

4 minutos de lectura

Quiero realizar algunas transformaciones en el código fuente de C. Necesito una herramienta en linux que genere un AST completo a partir del código fuente para que pueda aplicar mis transformaciones en este AST y luego volver a convertirlo al código fuente C. Lo intenté ELSA pero no se está compilando. (Estoy usando Ubuntu 8.4). ¿Alguien puede sugerir una mejor herramienta/aplicación?

  • Creo que OpenC++ es lo más cercano que obtendrá ahora.

    rektide

    4 de noviembre de 2008 a las 6:52

yo recomendaria sonido metálico. Tiene una implementación en C bastante completa con la mayoría de las extensiones de gcc, y el código es muy comprensible. Su implementación de C ++ está incompleta, pero si solo le importa generar AST a partir del código C, debería estar bien. Dependiendo de lo que quieras hacer, puedes usar clang como una biblioteca y trabajar con los AST directamente, o hacer que clang los descargue en la consola.

  • Lo hace absolutamente. Así es como funciona toda la funcionalidad de reescritura de clang-cc. Para un ejemplo concreto, echa un vistazo llvm.org/svn/llvm-project/cfe/trunk/lib/Frontend/… que es lo que pasa cuando ejecutas clang-cc -rewrite-blocks.

    – Luis Gerbarg

    9 de noviembre de 2009 a las 11:02

avatar de usuario
Eli Bendersky

Ver pycparser – un generador AST de Python puro para C.

  • Solo soporte C99. Puede ser suficiente para muchos. no era para mi

    – Ingeniero

    23 de abril de 2016 a las 15:41


avatar de usuario
Remo.D

Hay dos proyectos que conozco y que podrían resultarle útiles:

Ambos analizan un código fuente C estándar para permitir un mayor análisis y transformación. No los he usado, así que tienes que comprobar por ti mismo si se ajustan a tus necesidades.

La sugerencia de usar GCC también es válida, por supuesto. Sin embargo, sé que no hay mucha documentación sobre este aspecto de gcc.

  • CIL no regenera el código fuente, AFAIK.

    –Ira Baxter

    9 de noviembre de 2009 a las 2:37

  • Por lo que puedo deducir, CIL requiere que escriba sus análisis AST en OCaml; El soporte C está planeado.

    – Ingeniero

    23/04/2016 a las 15:40


Para obtener la salida AST XML, puede intentar usar escanear desde MarpaX::Idiomas::C::AST. La salida se verá así:

xml
<cscan>
<typedef_hash>
<typedef id="GLenum" before="unsigned int" after="" file="/usr/include/GL/gl.h"/>
...

www.antlr.org

  • Si bien la distribución ANTLR predeterminada no contiene un analizador C, hay varios de ellos flotando, solo búsquelos en Google. Saludos, Sebastián

    – Sebastián M

    12 de julio de 2009 a las 11:52

  • Hay analizadores C basados ​​en ANTLR. No sé si alguno de ellos puede regenerar la fuente a partir de un AST (modificado).

    –Ira Baxter

    9 de noviembre de 2009 a las 2:38

avatar de usuario
ensambladorplan9

http://ctool.sourceforge.net/

  • Si bien la distribución ANTLR predeterminada no contiene un analizador C, hay varios de ellos flotando, solo búsquelos en Google. Saludos, Sebastián

    – Sebastián M

    12 de julio de 2009 a las 11:52

  • Hay analizadores C basados ​​en ANTLR. No sé si alguno de ellos puede regenerar la fuente a partir de un AST (modificado).

    –Ira Baxter

    9 de noviembre de 2009 a las 2:38

avatar de usuario
Comunidad

Nuestro Kit de herramientas de reingeniería de software DMS se ha utilizado en grandes sistemas C, analizando, transformando y regenerando código C. Se ejecuta en Windows y se ejecutará en Linux bajo Wine, pero maneja código C estilo Linux (GCC).

No puedo enfatizar lo suficiente la capacidad de ida y vuelta del código fuente C: analizar, construir árboles, transformar, regenerar código C compilable con los comentarios y bien impresos o con la sangría del programador original. Pocas de las otras respuestas aquí sugieren sistemas que pueden hacer eso de manera sólida.

El hecho de que DMS esté diseñado para realizar transformaciones de programas (a diferencia de otros sistemas sugeridos en las respuestas aquí) también es una gran ventaja. DMS proporciona coincidencias y reescrituras de patrones de árbol; aumenta esto con control total y análisis de flujo de datos que se utilizará para ampliar las condiciones que le gustaría igualar. Una herramienta que pretende ser un compilador es solo eso, y le resultará muy difícil convencerla de que no sea un compilador y, en cambio, que sea un motor de transformación como lo solicitó el OP.

Consulte https://stackoverflow.com/a/2173477/120163 para ver ejemplos de AST producidos por DMS.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad