2010-03-06 9 views
5

Y a-t-il une bibliothèque pour Python qui me permettra d'analyser le code C++?Code Python pour analyser et inspecter C++

Par exemple, disons que je veux analyser certains C++ code et trouver les noms de toutes les classes et leurs fonctions de membres/variables.

je peux penser à quelques façons de pirater ensemble en utilisant des expressions régulières, mais s'il y a une bibliothèque existante, il serait plus utile.

+0

edit: Je n'impliquais pas qu'en utilisant une expression régulière je pourrais correctement analyser C++, ce serait absurde puisque c'est un langage non-régulier. Je voulais dire que pour ce dont j'ai besoin, une expression rationnelle pourrait suffire. – Mike

+0

Même pour ce cas limité, je doute que vous pourriez le faire avec une regex seul. Peut-être que si vous le réduisez à des classes simples, bien éduquées sans magie de macro ou de modèle (et peut-être sans héritage aussi bien). – jalf

+0

Avez-vous essayé http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/? – refi64

Répondre

7

Dans le passé, je l'ai utilisé à ces fins gccxml (un analyseur C++ qui émet XML facilement analysable) - Je piraté mes propres interfaces Python, mais maintenant il y a une pygccxml qui devrait emballer que jusqu'à bien pour toi.

+0

pygccxml est super, je ne l'avais pas remarqué auparavant. –

0

Que diriez-vous de pyparsing?

+1

De ce site: "Le module pyparsing est une approche alternative pour créer et exécuter des grammaires simples". 1) C++ n'a pas de grammaire "simple". 2) La plupart des personnes essayant de construire un analyseur C++ échouent simplement; C'est un travail beaucoup plus important que vous pourriez imaginer. –

+1

Je sais qu'il est impossible d'analyser correctement C++ avec pyparsing, mais l'auteur de la question n'établit pas de compliant pour C++ autant que je sache, donc pyparsing pourrait lui suffire. Laissez-le être le juge. –

+0

cela ne serait pas utile parce que je devrais écrire la grammaire simple moi-même. merci pour la suggestion – Mike

4

L'analyse précise de C++ correspond à des années-lumière de quelque chose que vous pouvez faire avec une expression régulière. Vous avez besoin d'un analyseur C++ complet, et ils sont assez difficiles à construire. J'ai été impliqué dans la construction d'un sur plusieurs années, et suivre qui le fait; Je ne connais pas d'être tenté dans Python.

Celui que je travaille sur est DMS C++ Front End. Il fournit non seulement l'analyse, mais le nom complet et la résolution de type. Après l'analyse syntaxique, vous pouvez extraire des informations détaillées sur le code à n'importe quel niveau de détail, y compris des détails arbitraires sur le contenu de la fonction.

Vous pouvez envisager d'utiliser GCCXML, qui contient un analyseur, et produira, je crois, les noms de toutes les classes, fonctions et variables de premier niveau. GCCXML ne vous donnera aucune information sur ce qu'est à l'intérieur une fonction.

+0

+1 pour gccxml ... cherche à être exactement ce dont j'ai besoin. – Mike

1

C'est un peu en dehors de la portée de votre question peut-être ... mais en fonction de ce que vous essayez d'atteindre, peut-être Exuberant Ctags vaut regarder.

+0

bonne suggestion, il serait encore plus utile s'il y avait une bibliothèque qui pourrait analyser la sortie ctags – Mike

1

N'a pas essayé, mais en utilisant les liaisons Python de l'analyseur de Clang LLVM peut travailler; voir here.

Questions connexes