2011-03-04 19 views
7

Me gustaría obtener el Árbol de sintaxis abstracta (AST) de un código C, en un valor OCaml, para que pueda seguir procesando el código analizado con un programa OCaml simple.Analizando C a Ocaml

Tenía en mente usar GCC, obtener el AST (en GIMPLE) con un gancho y convertir el código de GIMPLE a Ocaml.

Pero me pregunto si hay otra manera, o si alguien ya hizo algo similar. (No he encontrado mucho en realidad sobre eso ...)

No quiero recurrir al uso de CIL. Es un analizador OCaml para código C, pero no contiene todas las optimizaciones que tiene GCC. (Especialmente necesito un análisis de alias más profundo que el implementado en CIL).

¿Puede LLVM ser una buena idea para mirar? ¿Ya hecho tal vez?

¿Alguna idea mejor?

+3

Parsing! = Optimización. El último viene después. – delnan

Respuesta

9

Si su problema con CIL es la precisión del análisis de alias proporcionado, eche un vistazo a Frama-C. Se basa en CIL pero proporciona un precise value analysis que funciona para punteros. El análisis de valor hace que sus resultados estén disponibles dentro de una arquitectura modular.

+2

Secundado: CIL y Frama-C son probablemente las mejores herramientas que puede esperar, y Pascal Cuoq es una de las personas adecuadas para preguntar. – gasche

+0

Pero, ¿qué le parece escribir un analizador para el código GIMPLE, o incluso el código LLVM? Luego miro el código * después de * todas las optimizaciones para esos compiladores, y analizo el AST en un valor OCaml ... ¿Es eso tan ... impensable? – Daz

+0

@Daz Si vas por esa ruta, recomendaría LLVM. Al menos hasta hace unos años, cuando tomamos nuestras propias decisiones, los desarrolladores de GCC no ofrecieron garantías sobre la estabilidad de Gimple, y de hecho estaba cambiando de una versión a otra. No estoy seguro de qué tipo de magia esperas de las optimizaciones de lenguaje intermedio, pero para las aplicaciones en Frama-C, la trazabilidad y la normalización del código son más importantes que las optimizaciones (e incluso estos dos son difíciles de tener al mismo tiempo sin el tercero). –

0

Otra opción para analizar C a Ocaml sería FrontC. Su descripción dice:

FrontC es una biblioteca OCAML que proporciona un analizador C y un lexer. El resultado es un árbol sintáctico fácil de procesar con la administración habitual de árboles OCAML.

Proporciona compatibilidad con la sintaxis ANSI C, la sintaxis de estilo R antigua C & y los atributos CC estándar de GNU.

También proporciona una impresora bonita C como ejemplo de uso.