Ich mache interprozedurale Datenflussanalyse mit Clang. Momentan benutze ich libtooling, um Quelldateien zu analysieren und AST-Besucher anzurufen. Die Frage ist, wie ich eine einzelne AST für mehrere .c-Dateien erstellen?AST für mehrere Quelldateien mit Clang
Ich habe versucht, ASTImport-Klasse zu verwenden, aber es unterstützt nicht den Import einiger AST-Knoten. Außerdem mache ich etwas falsch, wenn ich CompilerIstance erstelle und manipuliere und es im Destruktor abstürzt.
Eine sehr ähnliche Option war ASTImportAction, aber mir ist nicht ganz klar, welche Kommandozeilenparameter in diesem Fall an das ClangTool übergeben werden sollten.
Die dritte Option bestand darin, ASTUnits für jede .c-Datei zu erstellen und nach Definitionen in jedem von ihnen zu suchen. Es ist nicht klar, wie man zwischen benutzerdefinierbaren Typen, z. Aufzeichnungen. In ASTImport verwenden sie die IsStructurallyEquivalent() - Funktion, aber sie wird im anonymen Namespace deklariert, so dass ich nur diesen ganzen Code in mein Programm kopieren kann. Und wieder unterstützt es nicht alle AST-Knoten.
Aus dem Internet scheint dieser Link http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html am besten geeignet, aber für mich sind die technischen Details der Lösung nicht klar.
Alle Vorschläge sind willkommen. Vielen Dank.
Warum möchten Sie "eine" AST für mehrere Dateien produzieren? Warum können Sie nicht einfach für jede Datei einen AST verwalten? –
Ich wünschte, jemand hätte eine Antwort dafür: \ Ich versuche das gleiche jetzt zu tun. –