Ich muss ein einfaches Tool schreiben, das eine einfache Analyse über vorhandenen C++-Code zurückgibt.
Und so suche ich nach einem C++-Parser, der mir zumindest Informationen zu Headern geben würde:
Für den ersten Schritt würde das reichen.
Ich habe das perfekte Tool gefunden: gcc-xml , das diese Sache macht, aber es schlägt mit C++ 11-Code und jünger fehl. Gibt es eine Lösung für diese Aufgabe? Ich denke, das muss es, denn Compiler, die C++ 11 unterstützen, verstehen Code irgendwie :-)
Ich würde doxygen empfehlen - obwohl die C++11-Unterstützung ein paar ausstehende Fehler zu haben scheint, sollte es Ihnen einen sehr guten Start geben.
Ebenfalls:
Die gccxml-Site gibt jetzt an, dass sie durch CastXML ersetzt wurde , basierend auf LLVM >= 3.6, das C++ 11 unterstützt.
Unser DMS Software Reengineering Toolkit mit seinem C++ Frontend ist wahrscheinlich ein guter Kandidat für Ihre Aufgabe.
DMS ist als Grundlage für benutzerdefinierte Programmanalyse- und Transformationstools konzipiert. Es bietet ein Ökosystem aus Analysemaschinen, Baumerstellern, Attributgrammatikberechnungen, Symboltabellenverwaltung, Flussanalyse, Mustervergleichen auf Quellebene, Transformationsmaschinen auf Quellebene und Entwicklungstools. Man verwendet DMS, indem man Parser (und erweiterte Analysatoren) für eine oder mehrere interessierende Sprachen einfügt. Für den Fall, dass es keinen handelsüblichen Parser gibt, bietet DMS eine starke Parser-Generierungsmaschinerie zum Erstellen eines solchen Parsers. (Wir haben kürzlich einen Erlang-Parser [nur] als Herausforderung an einem Tag gebaut).
Das C++-Frontend wurde mithilfe der DMS-Unterstützung erstellt. Es verarbeitet praktisch alle (und wir vervollständigen) C++14 in ANSI-, GCC- und Microsoft-Varianten. Mit DMS analysiert es C++-Quelltext mit seinem eigenen vollständigen Präprozessor, erstellt präzise abstrakte Syntaxbäume und genaue Symboltabellen. Es bietet Steuerungs- und Datenflussanalysen auf Methodenebene. Alle diese Informationen stehen einem DMS-Anwender für sein individuelles Tool zur Verfügung.
Wenn Sie Source-to-Source-Transformationen auf den Code anwenden möchten, stellt DMS diese Funktion direkt bereit, indem das Frontend verwendet wird, um die Musterbeschreibungsmaschinerie zu unterstützen. die Transformationen können auf willkürlichen Tatsachen beruhen, die aus den Symboltabellen oder der Strömungsanalysemaschine gezogen werden. Oder Sie könnten einfach XML für Fakten generieren, die Sie mit dem XML-Paket von DMS exportieren möchten.
Um beispielsweise eine Liste von Benutzertypen zu erhalten, würde man die Symboltabellen besuchen (eingebaute DMS-Maschinen unterstützen einen vom Front-End bereitgestellten Besucher) und Einträge auf Typen untersuchen. Man kann exotischere Dinge tun; Beispielsweise können Sie zu einem beliebigen Ausdrucksbaum navigieren und nach dem Typ des Ausdrucks fragen.
Zur Frage von OP:
DMS und das C++-Frontend wurden verwendet, um eine Vielzahl von C++-Tools zu erstellen (auch auf der Website) sowie massive architektonische Änderungen an großen C++-Codes durchzuführen (siehe technische Dokumente auf der Website).
Ira Baxter