2008-11-17 14 views
6

Estoy buscando una biblioteca basada en Windows que se pueda usar para analizar un conjunto de archivos C para listar variables globales y locales. Las variables globales y locales pueden declararse utilizando typedef. El resultado (es decir, la lista de variables globales y locales) se puede utilizar para el procesamiento posterior (por ejemplo, reemplazando los nombres de variables con un nombre nuevo).Archivos de Parse C

¿Existe una biblioteca disponible?

Respuesta

11
+0

Ver también: http://code.google.com/p/pycparser/ –

+0

Gracias, lo agregaré a la lista. – luke

0

Si es evidente C, lex y yacc son tus amigos, pero hay que tener en cuenta preprocesador de C - archivos de origen con las macros no expandidas son típicamente no cumplen con la sintaxis de C de modo analizador, escrito con K & R gramática mente, lo más probable es que falle.

Si decide analizar el resultado del preprocesador, prepárese para que su analizador falle debido a "extensiones" de su compilador particular, ya que es muy probable que los encabezados de biblioteca estándar los usen. Al menos este es el caso de GCC.

Tuve esto con GCC y finalmente decidí lograr mi objetivo utilizando un enfoque diferente. Si solo necesita cambiar los nombres de las variables, las expresiones regulares funcionarán bien, y no es necesario crear un analizador completo, en mi humilde opinión. Si su objetivo es solo recopilar datos, la fuente de datos definitiva es la información de depuración. Hay formas de obtener información de depuración del binario: para los archivos ejecutables ELF con DWARF hay libdwarf, para Windows-land (¿COFF?) También debería ser algo. Probablemente pueda usar algunas herramientas existentes para obtener información sobre errores en binarios. De nuevo, no sé nada sobre Windows, debe investigar.

3

de análisis C es mucho más difícil de lo que parece, si se toma en cuenta diferentes dialectos, las directivas de preprocesador, la necesidad de información de tipo durante el análisis, etc. Las personas que le dicen "solo use lex y yacc" tienen que claramente no han hecho un analizador C de producción.

Una herramienta que puede hacerlo es nuestra C front end

Se ocupa de todos los aspectos mencionados anteriormente.

Al finalizar, tiene una tabla de símbolos completa, navegable con todos los identificadores e información de tipo correspondiente. El listado de variables globales y locales sería trivial con esto.

Soy el arquitecto detrás de Semantic Designs.