3 Stimmen

C++-Code-Parser/Prozessorbibliothek

Gibt es irgendeine Bibliothek, die einen C++-Quellcode analysiert, um, sagen wir, einen Aufrufgraphen, einen Klassenvererbungsbaum, eine Ablaufsteuerung, eine Klassenmitgliederliste oder irgendetwas anderes als gebrauchsfertigen Graphen oder Struktur im Code (nicht im Diagramm) zu erzeugen.

Um es deutlicher zu machen, nehmen wir an, dass die Erstellung eines Call-Graph-Bildes folgendermaßen abläuft:

`

C++ source -> parser -> intermediate structure -> renderer -> call graph image
                                    ^
                                    |
                              [i need this]

`

3voto

BenG Punkte 1272

En LLVM Familie der Bibliotheken ist wahrscheinlich die beste Wahl. Die Unterstützung für C++ war allerdings nicht vollständig, als ich das letzte Mal nachgesehen habe.

3voto

Pavel Minaev Punkte 97251

Das hängt davon ab, wie genau Sie das Parsing haben wollen. Wenn Sie wollen, dass es absolut genau ist (d.h. keine Klasse wegen eines überkomplizierten Makros oder einer Template-Metaprogrammierung übersehen sollte, die es nicht handhaben konnte), dann brauchen Sie ein richtiges C++-Frontend dafür, und ich kenne keines, das sowohl kostenlos als auch leicht wiederverwendbar ist.

Wenn Sie bereit sind zu zahlen, dann gibt es mindestens zwei Möglichkeiten:

EDG wird verwendet, um IntelliSense in VC++2010 zu steuern, was ziemlich beeindruckend ist und sehr genau zu sein scheint - meiner Erfahrung nach hat es die Vervollständigung von polymorphen Boost.Lambda richtig gehandhabt (nicht überraschend, da es auch den EDG C++ Compiler steuert, der offensichtlich korrekte Eingaben erhalten muss).

Ich weiß nicht viel über das Semantic Design Frontend oder seine Benutzer, aber Ira Baxter von dort ist auf StackOverflow, also überlasse ich es ihm, ausführlichere Informationen über ihr Produkt zu liefern.

Wenn Sie frei, aber unvollkommen sein wollen, dann vielleicht GCC_XML ist gut genug für Sie.

0voto

bmargulies Punkte 94152
  1. das ist das Innenleben des GCC. Er ist sozusagen wie eine Bibliothek aufgebaut.
  2. Es gibt die Eclipse CDE-Pakete, die C++ gut genug für die IDE parsen, was für Sie gut genug sein kann oder auch nicht.

0voto

JhnW Punkte 70

Libclang (Teil der LLVM-Familie) bietet gute Parser für C++. Die Bibliothek verwendet C, hat aber eine sehr gute Python-Anbindung. Ich bin derzeit die Entwicklung einer Python-Bibliothek, die Libclang ein bisschen weiter von der Compiler und näher an den Endbenutzer der Datenstruktur (übrigens Parcheando Unvollkommenheiten in der LLVM-Parser, zum Beispiel durch Zippen in Template-Parameter) wickelt: https://pypi.org/project/devana/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X