Gibt es eine gute Python-Bibliothek, die das Parsen von C++?
Google nicht wieder bis alles, was relevant erschienen.
Ich habe eine Reihe von bestehenden, funktionierenden C++ - code, und ich würde gerne python verwenden, um durch kriechen und herauszufinden, Beziehungen zwischen Klassen, etc.
EDIT: wollte Nur darauf hinweisen: ich glaube nicht, dass ich brauchen oder wollen, zu analysieren jedes bit von C++; ich brauche nur etwas schlau genug zu Holen, die auf Klassen -, Funktions-und member-Variablen-Deklarationen, und die zu überspringen-Funktion Definitionen.
InformationsquelleAutor der Frage csbrooks | 2009-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
C++ ist notorisch schwer zu analysieren. Die meisten Menschen, die versuchen, um dies richtig tun am Ende auseinander zu nehmen ist ein compiler. In der Tat ist dies (zum Teil), warum LLVM gestartet: Apple musste einen Weg finden, könnten Sie analysieren, C++ für die Verwendung in XCode, der auf die Art und Weise der compiler analysiert.
Deshalb gibt es Projekte wie GCC_XMLdie Sie kombinieren könnte mit einem python-xml-Bibliothek.
Einige non-compiler-Projekte, die scheinen zu tun einen ziemlich guten job beim Parsen von C++ sind:
InformationsquelleAutor der Antwort Stef
Nicht eine Antwort als solche, sondern nur um zu zeigen, wie hart das Parsen von C++ korrekt eigentlich ist. Meine Lieblings-demo:
Dies ist durchaus gültig, standard-konformen C++, aber die genaue Bedeutung der auskommentierte Zeile hängt von Ihrer Implementierung ab. Wenn
sizeof(void*)==sizeof(int)
(typisch auf 32-bit-Plattformen), ist es eine Deklaration der lokalen Variablend
Typa::b<c>
. Wenn der Zustand nicht halten, dann ist es ein no-op-Ausdruck((a::b < c) > d)
. Hinzufügen eines Konstruktor füra::b
wird eigentlich lassen, setzen Sie die Differenz über das Vorhandensein/fehlen von Nebenwirkungen.InformationsquelleAutor der Antwort Pavel Minaev
Seit vielen Jahren habe ich mit pygccxmldas ist ein sehr schönes Python-wrapper für GCC-XML. Es ist ein sehr " full-featured-Paket bildet die Grundlage für einige gut eingesetzte code-generation-tools gibt wie py++die ist vom gleichen Autor.
InformationsquelleAutor der Antwort jkp
Finden Sie nicht ein drop-in-Python-Bibliothek, um dies zu tun. Parsen von C++ ist fummelig, und einige Parser geschrieben worden, die nicht Teil eines Compilers. Finden Sie eine gute Zusammenfassung der Probleme hier.
Die beste Wette sein könnte clangals die C++ - Unterstützung ist etablierte. Obwohl dies nicht eine Python-Lösung, klingt es so, als würde es allerdings sein, offen für re-use innerhalb einer Python-wrapper, da die Betonung auf Kapselung und gutes design in seiner Entwicklung.
InformationsquelleAutor der Antwort jlarcombe
Pycparser ist eine vollständige und funktionale parser für ANSI-C.
Vielleicht verlängern Sie es auf c++ 🙂
InformationsquelleAutor der Antwort Eli Bendersky
Wenn Sie formatiert habe Ihre Kommentare in einer kompatiblen Art und Weise, Doxygen macht einen fantastischen job. Es werde auch um die Vererbung von Diagrammen wenn Sie haben graphviz installiert.
Beispielsweise DOxygen über die folgenden:
Werden wiederum all diese Kommentare in die Einträge .html-Dateien. Mit mehr komplizierte designs, ist das Ergebnis noch günstiger - oft viel einfacher, als zu versuchen, durchsuchen Sie die Quelle.
InformationsquelleAutor der Antwort Jon Cage
Auf dieser Seite zeigt eine C++ - Grammatik geschrieben, die in Antlr, und Sie kann Python-code generieren.
Da scheint auch jemand zu sein, der arbeitete auf einem C++ - parser in pyparsing, aber ich war nicht in der Lage, herauszufinden, wer oder dessen aktuellen status.
InformationsquelleAutor der Antwort Kathy Van Stone
Gibt es keine (Kostenlose) gute Bibliothek zum Parsen von C++ in alle Sprache.
Ihre besten Entscheidungen sind wahrscheinlich Dehydra g++ - plugin, clang, oder Elsa.
InformationsquelleAutor der Antwort Employed Russian
Den pyparsing wiki zeigt dieses Beispiel - alle es tut, ist zu analysieren struct-Deklarationen, so könnte dies Ihnen nur einen Einblick in die Größenordnung des Problems.
Ich schlage vor, Sie (oder noch besser, Ihr Arbeitgeber) berappen $200 und kaufen Enterprise Architect von sparxsystems. Diese software ist erstaunlich leistungsfähig für den Preis, und enthält ziemlich gute code-reverse engineering-Funktionen. Sie verbringen weit mehr, als dies in Ihrer eigenen Zeit zu bekommen nur etwa 2% der Arbeit getan. In diesem Fall, "kauft" erobert "machen".
InformationsquelleAutor der Antwort PaulMcG
Ctypes verwendet gcc-xml für die code-Generierung. Es ist möglich, dass cpptypes tut auch. Selbst wenn es nicht klappt, könnten Sie mit gcc-xml-XML-Dokument generieren von C++ - Datei, dann Parsen der xml mit einem der built-in oder ein Drittanbieter-Python-XML-Parser.
InformationsquelleAutor der Antwort Jason R. Coombs
Hier ist ein SourceForge-Projekt, die behauptet, dass das Parsen von c++ - Header. Wie die anderen Kommentatoren haben darauf hingewiesen, es gibt keine Allgemeine Lösung, aber Sie, es klingt wie es wird nicht genug für Ihre Bedürfnisse. (Ich rannte über es für eine ähnliche brauchen und noch nicht selber ausprobiert noch nicht.)
http://sourceforge.net/projects/cppheaderparser/
InformationsquelleAutor der Antwort Bill
Den Clang-Projekt stellt libraries für nur Parsen von C++ - code.
Entweder mit Clang und GCC erzeugen Sie eine XML-Darstellung des code
Wenn Sie lieber eine mehr Pythonian Lösung können Sie auch Suche nach einem C++, yacc Grammatik und Verwendung py-lagig (Yacc für Python), aber das scheint die Lösung, braucht mehr Arbeit
InformationsquelleAutor der Antwort SystematicFrank
Ich würde halten Sie ein Auge auf die gcc.gnu.org/wiki/plugins wie es scheint, wie Sie plugins sind der Weg zu gehen. Auch die gcc-python-plugin wie es scheint, hat eine schöne Umsetzung.
InformationsquelleAutor der Antwort stephenmm