2010-03-06 14 views
5

¿Hay una biblioteca para Python que me permita analizar el código de C++?Código de Python para analizar e inspeccionar C++

Por ejemplo, digamos que quiero analizar un código de C++ y encontrar los nombres de todas las clases y sus funciones/variables de miembro.

Puedo pensar en algunas formas de hackearlo usando expresiones regulares, pero si hay una biblioteca existente sería más útil.

+0

editar: No estaba implicando que mediante el uso de una expresión regular podría analizar adecuadamente C++, eso sería absurdo ya que es un lenguaje no habitual. Quise decir que para lo que necesito una expresión regular podría ser suficiente. – Mike

+0

Incluso para ese caso limitado, dudo que puedas hacerlo solo con expresiones regulares. Quizás si lo reduce a clases simples y de buen comportamiento sin magia macro o de plantilla (y tal vez sin herencia también). – jalf

+0

¿Has probado http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/? – refi64

Respuesta

7

En el pasado he utilizado para tales fines gccxml (un analizador de C++ que emite XML fácilmente analizable) - Me corté mis propias interfaces de Python a ella, pero ahora hay un pygccxml que debe paquete que daba energía para tú.

+0

pygccxml se ve muy bien, no lo había notado antes. –

0

¿Qué tal pyparsing?

+1

Desde ese sitio: "El módulo de pyparsing es un enfoque alternativo para crear y ejecutar gramáticas simples". 1) C++ no tiene una gramática "simple". 2) La mayoría de las personas que intentan construir un analizador de C++ simplemente fallan; es un trabajo mucho más grande que puedas imaginar. –

+1

Sé que es imposible analizar C++ correctamente con pyparsing, pero el autor de la pregunta no está compilando un compilador para C++ hasta donde yo sé, por lo que pyparsing podría ser suficiente para él. Deja que sea el juez. –

+0

que no sería útil porque tendría que escribir la gramática simple yo mismo. gracias por la sugerencia – Mike

4

El análisis C++ está a años luz de algo que se puede hacer con una expresión regular. Necesita un analizador de C++ completo, y son bastante difíciles de construir. He estado involucrado en la construcción de uno durante varios años, y sigo quién lo está haciendo; No sé si se intentó en Python.

En el que trabajo es DMS C++ Front End. Proporciona no solo el análisis, sino también el nombre completo y la resolución de tipo. Después del análisis, básicamente puede extraer información detallada sobre el código con el nivel de detalle que desee, incluidos los detalles arbitrarios sobre el contenido de la función.

Puede considerar el uso de GCCXML, que sí contiene un analizador, y producirá, creo, los nombres de todas las clases, funciones y variables de nivel superior. GCCXML no le dará ninguna información acerca de lo que es dentro de una función.

+0

+1 para gccxml ... buscando ser exactamente lo que necesito. – Mike

1

Esto está un poco fuera del alcance de su pregunta quizás ... pero dependiendo de lo que esté tratando de lograr, tal vez vale la pena mirar Exuberant Ctags.

+0

buena sugerencia, sería incluso más útil si hubiera una biblioteca que pudiera analizar la salida de ctags – Mike

1

No lo he intentado, pero usando los enlaces de Python del analizador Clang de LLVM puede funcionar; ver here.

Cuestiones relacionadas