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.
Siehe auch: http://code.google.com/p/pycparser/ –
Danke, ich füge das zur Liste hinzu. – luke