2010-12-12 48 views
4

J'ai besoin d'analyser les en-têtes de fonctions à partir d'un fichier .i utilisé par SWIG qui contient toutes sortes d'ordures à côté des en-têtes de fonctions. (la sortie finale serait une liste de déclarations de fonction)
La meilleure option pour moi serait d'utiliser la chaîne d'outils GNU (GCC, Binutils, etc.) pour le faire, mais je pourrais manquer un moyen facile de le faire avec SWIG . Si je suis s'il vous plaît dites-moi!
Merci:]Analyse des en-têtes de fonction C++ à partir d'un fichier à l'aide de la chaîne d'outils GNU

edit: Je ne sais pas comment faire ça avec GCC toolchain, si vous avez une idée, ce sera génial.

Répondre

2

Je voudrais essayer d'obtenir un vidage XML de l'arbre de syntaxe abstraite soit de clang ou de gccxml. De là, vous pouvez facilement extraire les déclarations de fonctions qui vous intéressent.

0

La meilleure façon d'extraire les fonctions de la poubelle qui est des fichiers d'en-tête C est de substituer ce qui constitue la poubelle la plus malodorante: les macros. Vous pouvez le faire avec:

cpp - The C Preprocessor 
+0

cela ne m'aide pas. Macros et al. sont peut-être 1% du fichier, j'ai besoin de quelque chose de beaucoup plus fort. – stnr

1

Notre DMS Software Reengineering Toolkit fournit l'analyse de programme général, l'analyse et la capacité de transformation. Il a des frontaux pour une grande variété de langues, y compris C++.

Il a été utilisé pour analyser et transformer des programmes C++ très complexes et leurs fichiers d'en-tête.

Vous n'êtes pas certain de ce que vous allez faire après avoir "analysé les en-têtes de fonction"; Normalement, les gens veulent extraire des informations ou produire un autre artefact. DMS avec son frontal C++ peut faire l'analyse; vous pouvez configurer DMS pour faire les choses personnalisées.

En pratique, ce n'est généralement pas un exercice de l'après-midi; DMS est une bête complexe, car elle doit faire face à des bêtes complexes comme C++. Et je m'attends à ce que vous soyez confronté au même type de complexité pour tout outil capable de gérer C++. La chaîne d'outils GCC peut clairement gérer C++, donc vous pourriez être capable de le faire avec (au même niveau de complexité) mais GCC est conçu pour être un compilateur, et à mon humble avis vous trouverez un combat pour l'obtenir faire voulez.

Votre objectif "déclarations de fonctions de sortie" n'est pas clair. Vous voulez juste les noms des fonctions? Vous voulez une signature de fonction? Vous voulez toutes les déclarations de type dont dépend la fonction? Vous voulez que toutes les déclarations de type dont dépend la fonction, si elles ne sont pas déjà présentes dans un fichier include existant que vous avez l'intention d'utiliser?

+0

Je dois obtenir des signatures de fonctions. Il semble que ce soit un très bon logiciel, mais malheureusement je dois m'installer sur des logiciels libres. – stnr

+0

Pourquoi n'avez-vous pas besoin des déclarations de type pour les types qui prennent en charge les signatures de fonction? Dans la plupart des applications que nous faisons avec DMS, dans lequel vous voulez générer du code pour instancier/appeler de telles fonctions, vous avez besoin de ces informations ou vous n'avez pas de code compilable. –

+0

Je peux obtenir du code compilable avec les seules signatures de fonctions car je peux juste faire un pointeur nul sur les types que les fonctions utilisent et utiliser * ptr comme un objet. C'est une sorte de tricherie, mais ça va certainement se terminer et c'est tout ce dont j'ai besoin pour le moment. Merci pour la bonne réponse si! – stnr