Ich möchte den AST von Clang für meinen C-Code verwenden und einige Analysen über den AST durchführen. Einige Hinweise, wo man anfangen soll, wie man Clang’s AST erhält, Tutorials oder irgendetwas in dieser Hinsicht werden eine große Hilfe sein!!!
Ich habe versucht, einige zu finden, und ich habe diese bekommen Verknüpfung die vor 2 Jahren erstellt wurde. Aber aus irgendeinem Grund funktioniert es bei mir nicht. Der Beispielcode im Tutorial gibt mir zu viele Fehler. Ich bin mir also nicht sicher, ob ich den Code richtig baue oder etwas mit dem Tutorial nicht stimmt. Aber ich würde gerne auch von einer anderen Seite aus anfangen.
Beginnen Sie mit dem von Sharth verlinkten Tutorial. Gehen Sie dann Clangs Doxygen durch. Beginnen mit SemaConsumer.
Lesen Sie viel Quellcode. Clang ist ein sich bewegendes Ziel. Wenn Sie Tools schreiben, die auf Clang basieren, müssen Sie erkennen, dass Clang täglich Funktionen hinzufügt und repariert, also sollten Sie darauf vorbereitet sein, viel Code zu lesen!
Sie möchten wahrscheinlich die stabile C-API, die in der libclang-Bibliothek bereitgestellt wird, im Gegensatz zu den instabilen internen C++-APIs, die andere erwähnt haben.
Die derzeit beste Dokumentation für den Anfang sind die Videos/Folien des Vortrags „libclang: Thinking Beyond the Compiler“, die auf der verfügbar sind LLVM Developers Meeting-Website.
Beachten Sie jedoch, dass die Stabilität der API auf Kosten der Vollständigkeit geht. Du wirst es nicht können alles mit dieser API, aber es ist viel einfacher zu verwenden.
Tong Zhou
Um die AST zu erhalten sowie Stufen des Frontends kennenzulernen, gibt es im Buch „LLVM Core Libraries“ ein Frontend-Kapitel. Grundsätzlich hat es einen solchen Fluss (im Fall von llvm-4.0.1 und sollte für spätere Versionen ähnlich sein):
Die letzte Funktion verarbeitet die gesamte Übersetzungseinheit (Decls der obersten Ebene werden an dieser Stelle bereits verarbeitet) und ruft auf EmitBackendOutput um Backend-Sachen zu machen. Diese Funktion ist also ein guter Ort, an dem Sie etwas mit dem vollständigen AST tun können, bevor Sie Backend-Ausgaben ausgeben.