Sto eseguendo analisi del flusso di dati inter-procedurali con clang. Attualmente sto usando libtooling per analizzare i file sorgente e chiamare i visitatori AST. La domanda è: come posso creare un singolo AST per diversi file .c?AST per più file di origine con clang
Ho provato a utilizzare la classe ASTImport, ma non supporta l'importazione di alcuni nodi AST. Inoltre, sto facendo qualcosa di sbagliato quando creo e manipolo CompilerIstance e si blocca in destructor.
Un'opzione molto simile era ASTImportAction ma non è abbastanza chiaro per me quali parametri della riga di comando devono essere passati al ClangTool in questo caso.
La terza opzione era creare ASTUnits per ogni file .c e cercare le definizioni in ognuno di essi non è chiaro come trovare la corrispondenza tra i tipi definiti dall'utente, ad es. record. In ASTImport usano la funzione IsStructurallyEquivalent() ma è dichiarata in namespace anonimo, quindi posso copiare tutto questo codice nel mio programma. E ancora supporta non tutti i nodi AST.
Da Internet questo collegamento http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html sembra essere il più appropriato ma per me i dettagli tecnici della soluzione non sono chiari.
Qualsiasi suggerimento è benvenuto. Mille grazie.
Perché si desidera produrre "uno" AST per diversi file? Perché non puoi semplicemente gestire un AST per ogni file? –
Vorrei qualcuno avesse una risposta per questo: \ sto cercando di fare la stessa cosa in questo momento. –