2010-12-12 4 views
4

Ich muss Funktion Header aus einer .i-Datei von SWIG, die alle Arten von Müll neben den Funktionsheadern enthält analysieren analysieren. (Die endgültige Ausgabe wäre eine Liste von Funktionsdeklarationen)
Die beste Option für mich wäre die Verwendung der GNU Toolchain (GCC, Binutils, etc ..), um dies zu tun, aber ich könnte eine einfache Möglichkeit, es mit SWIG zu tun vermissen . Wenn ich bitte bin, sag es mir!
Danke:]Parsing C++ - Funktion Header aus einer Datei mit GNU-Toolchain

edit: Ich weiß auch nicht, wie man das mit GCC toolchain macht, wenn man eine Idee hat, wird es großartig.

Antwort

2

Ich würde versuchen, einen XML-Dump der abstrakten Syntax Baum entweder von clang oder von gccxml. Von dort können Sie leicht die Funktion Deklarationen extrahieren, die Sie interessiert sind.

0

Die beste Möglichkeit zum Extrahieren von Funktionsdecls aus dem Müll, der C-Header-Dateien ist, ist das Ersetzen von dem, was den übelsten Müll darstellt: Makros. Sie können das tun, mit:

cpp - The C Preprocessor 
+0

es hilft mir nicht. Makroset al. sind vielleicht 1% der Datei, ich brauche etwas viel stärkeres. – stnr

1

Unsere DMS Software Reengineering Toolkit bietet Allzweck-Programm-Analyse, Analyse und Transformation Fähigkeit. Es hat Frontends für eine Vielzahl von Sprachen, einschließlich C++.

Es wurde verwendet, um sehr komplexe C++ - Programme und ihre Header-Dateien zu analysieren und zu transformieren.

Sie sind nicht klar, was Sie tun werden, nachdem Sie die Funktion Header "analysieren"; normalerweise möchten die Leute einige Informationen extrahieren oder ein anderes Artefakt produzieren. DMS mit seinem C++ - Frontend kann das Parsing durchführen; Sie können DMS so konfigurieren, dass die benutzerdefinierten Funktionen ausgeführt werden.

Aus praktischen Gründen ist dies in der Regel kein Nachmittag; DMS ist ein komplexes Biest, weil es mit komplexen Bestien wie C++ zu tun hat. Und ich würde erwarten, dass Sie für jedes Werkzeug, das mit C++ umgehen kann, die gleiche Komplexität haben. Die GCC-Toolchain kann klar mit C++ umgehen, also könntest du es vielleicht (mit der gleichen Komplexität) machen, aber GCC ist ein Compiler, und IMHO wirst du einen Kampf finden, um es zu tun, was du hast wollen.

Ihr Ziel "Zielfunktionsdeklarationen" ist nicht klar. Du willst nur die Funktionsnamen? Sie möchten eine Funktionssignatur? Sie möchten alle Typdeklarationen, von denen die Funktion abhängt? Sie möchten alle Typdeklarationen, von denen die Funktion abhängt, wenn sie nicht bereits in einer vorhandenen Include-Datei vorhanden sind, die Sie verwenden möchten?

+0

Ich brauche Funktionen Signaturen. Es scheint ein großartiges Stück Software zu sein, aber leider muss ich mich auf Open Source \ free stuff einstellen. – stnr

+0

Warum brauchen Sie die Typdeklarationen für die Typen, die die Funktionssignaturen unterstützen? In den meisten Anwendungen, die wir mit DMS verwenden, in denen Sie Code zum Instanziieren/Aufrufen solcher Funktionen generieren möchten, benötigen Sie diese Informationen oder Sie erhalten keinen kompilierbaren Code. –

+0

Ich kann compilable Code mit den Funktionssignaturen allein erhalten, da ich nur einen Nullzeiger zu den Typen bilden kann, die die Funktionen benutzen und * ptr als ein Gegenstand benutzen. Es ist etwas betrügen, aber es wird definitiv kompilieren und das ist alles was ich für jetzt brauche. Danke für die tolle Antwort! – stnr