2008-11-17 11 views
6

Ich bin auf der Suche nach einer Windows-basierten Bibliothek, die zum Analysieren einer Reihe von C-Dateien verwendet werden kann, um globale und lokale Variablen aufzulisten. Die globalen und lokalen Variablen können mit typedef deklariert werden. Die Ausgabe (d. H. Liste der globalen und lokalen Variablen) kann dann für die Nachverarbeitung verwendet werden (z. B. Ersetzen der Variablennamen durch einen neuen Namen).Parse C-Dateien

Ist eine solche Bibliothek verfügbar?

Antwort

11
+0

Siehe auch: http://code.google.com/p/pycparser/ –

+0

Danke, ich füge das zur Liste hinzu. – luke

1

Ich weiß nicht, ob es eine Bibliothek bietet, aber werfen Sie einen Blick auf CTAGS.

0

Wenn es klar, C, lex und yacc sind deine Freunde, aber Sie müssen wegen C-Präprozessor aufzunehmen - Quelldateien mit nicht expandierten Makros sind sie normalerweise nicht mit C-Syntax entsprechen so Parser, geschrieben mit K & R Grammatik in Geist, wird höchstwahrscheinlich scheitern.

Wenn Sie sich entscheiden, die Ausgabe des Präprozessors zu analysieren, müssen Sie darauf vorbereitet sein, dass Ihr Parser aufgrund von "Erweiterungen" Ihres bestimmten Compilers fehlschlägt, weil sehr wahrscheinlich Standardbibliotheksheader sie verwenden. Zumindest ist das der Fall mit GCC.

Ich hatte dies mit GCC und beschloss schließlich, mein Ziel mit anderen Ansatz zu erreichen. Wenn Sie nur Namen für Variablen ändern müssen, sind reguläre Ausdrücke in Ordnung, und es besteht keine Notwendigkeit, einen vollständigen Parser, IMHO, zu erstellen. Wenn Sie nur Daten sammeln möchten, ist die ultimative Datenquelle die Debug-Information. Es gibt Möglichkeiten, Debug-Informationen aus der Binärdatei zu bekommen - für ELF-Executables mit DWARF gibt es libdwarf, für Windows-Land (COFF?) Sollte auch etwas sein. Wahrscheinlich können Sie einige vorhandene Tools verwenden, um Debug-Informationen über Binärdateien zu erhalten. Auch hier weiß ich nichts über Windows, das Sie untersuchen müssen.

0

ich über ein win32-basiertes System vor kurzem gelesen, dass an der Debug-Informationen sah in COFF dlls: verschiedene Dialekte, Präprozessordirektiven

3

Parsing C ist viel schwieriger, als es aussieht, wenn Sie nehmen in Konto, http://www.drizzle.com/~scottb/gdc/fubi-paper.htm die Notwendigkeit für Typ Informationen beim Parsen, etc. Leute, die Ihnen sagen, "nur lex und yacc verwenden" haben eindeutig nicht eine Produktion C-Parser gemacht.

Ein Tool, das dies tun kann, ist unser C front end

Es alle oben genannten Fragen behandelt werden.

Am Ende hat es eine vollständige, navigierbare Symboltabelle mit allen Identifikatoren und entsprechenden Typinformationen. Auflisten von globalen und lokalen Variablen wäre damit trivial.

Ich bin der Architekt hinter Semantic Designs.