Logré compilar exitosamente clang para windows con cmake y visual studio 10. Me gustaría obtener un archivo XML como representación AST del código fuente. Hay una opción que proporciona el resultado con sonido metálico con gcc bajo Linux (Ubuntu), pero no funciona en la caja de ventanas:¿Puedo obtener un volcado XML AST del código C/C++ con clang sin usar el compilador?
clang -cc1 -ast-print-xml source.c
Sin embargo, esto está invocando la etapa de compilación (que me gustaría evitar) . Cavar en el código fuente no me ayudó, en la medida en que soy bastante nuevo en el clang. Lo que pude para generar la versión binaria de la AST usando:
clang -emit-ast source.c
Por desgracia, este formato no se puede utilizar directamente para el análisis. ¿Hay algún método existente para generar directamente el árbol XML en lugar de uno binario en clang?
El objetivo es usar la representación XML en otras herramientas en el entorno .NET, así que tendría que hacer un ajuste de la lib de clang nativo para acceder al AST binario. Tal vez haya una tercera opción si alguien ya escribió algún analizador AST de clang binario para .NET?
Es posible que me falte algo como si el AST generado por el frente de clang no es equivalente al generado en la etapa de compilación.
Mi empresa crea interfaces C++, y * podemos * emitir volcados XML completos de los AST. Tenemos esto como un elemento de casilla de verificación, porque las personas lo solicitan. Nadie realmente lo usa, porque la cantidad de salida para un programa C++ real (que incluye todos los archivos de encabezado) es simplemente * enorme *, lo que hace que sea lento y torpe de manejar. La verdadera pregunta es, ¿por qué quieres hacer esto?Clang probablemente ya ofrezca una gran cantidad de maquinaria para procesar el C++ AST directamente (al igual que nuestra herramienta correspondiente); ¿Por qué querrías tratar de replicar todo ese trabajo? ¿Por qué no simplemente usar Clang para su propósito? –
... vea un volcado de árbol C++ en http://stackoverflow.com/a/17393852/120163 Esto no es XML, pero la herramienta también puede producir XML con exactamente el mismo contenido. –