2012-06-21 45 views
15

Tengo un gran archivo C (~ 100k líneas) que necesito poder analizar. Principalmente necesito poder obtener detalles sobre los campos individuales de cada estructura (como el nombre de campo y el tipo para cada campo en la estructura) desde su definición. ¿Hay alguna forma buena (código abierto, que pueda usar en mi código) de hacer esto? O debería escribir mi propio analizador para esto. Si tengo que escribir el mío, ¿alguien puede sugerir un buen lugar para comenzar? Nunca he trabajado con Python antes.analizando el código C usando python

Gracias

+1

¿Se puede publicar una muestra? ¿Necesitas probar un compilador de C (y soportar uniones, estructuras dentro de estructuras, typedefs, el preprocesador, etc. o simplemente obtener datos de estructuras simples? Algo me dice que este archivo C debe ser JSON, CSV, una base de datos , u otro formato de * datos *, no un archivo de CLOC de 100k ... –

+0

... y es probable que tampoco haya escrito un analizador de C anteriormente. No quiere hacerlo usted mismo; C es mucho más complicado de lo que piensas que es: macros, condicionales del preprocesador, incluye, sintaxis ambigua, sintaxis específica del vendedor, construcción de tabla de símbolos, ... Encuentra un analizador de C existente que ha tenido una validación extensa y usa eso, incluso si el analizador de C no está implementado en Python. Si quieres usar Python para procesar los resultados, está bien, pero no confundas a Python con la solución ["Nunca trabajé con Python antes" no es una buena señal de que esa forma te lleve al éxito.] –

+0

... Sugiero que considere GCCXML, que contiene un analizador C y exporta el tipo de los datos que desea como XML. –

Respuesta

17

Echa un vistazo a this link de una extensa lista de herramientas de análisis disponibles para Python. Específicamente, para analizar el código c, pruebe pycparser

7

La forma correcta de hacerlo es casi seguro que interactúe con el front-end de un compilador existente, como gcc, luego trabaje con la representación intermedia, en lugar de intentar crea tu propio analizador, en cualquier idioma.

Sin embargo, pycparser, según lo sugerido por Dhara bien podría ser un buen sustituto, y definitivamente mejor que cualquier intento de tirar el suyo.