Robię międzyprocesową analizę przepływu danych z klangiem. Obecnie używam libtooling do parsowania plików źródłowych i wywoływania gościa AST. Pytanie brzmi, w jaki sposób utworzyć pojedyncze AST dla kilku plików .c?AST dla wielu plików źródłowych z clang
Próbowałem użyć klasy ASTImport, ale nie obsługuje ona importu niektórych węzłów AST. Co więcej, robię coś złego, kiedy tworzę i manipuluję CompilerIstance i ulega awarii w destruktorze.
Bardzo podobną opcją była metoda ASTImportAction, ale nie jest dla mnie jasne, które parametry wiersza polecenia należy przekazać do ClangTool w tym przypadku.
Trzecią opcją było stworzenie ASTUnits dla każdego pliku .c i poszukiwanie definicji w każdym z nich nie jest jasne, jak znaleźć korespondencję między typami definiowanymi przez użytkownika, np. dokumentacja. W ASTImport używają funkcji IsStructurallyEquivalent(), ale są deklarowane w anonimowym obszarze nazw, więc mogę skopiować cały ten kod do mojego programu. I znowu obsługuje nie wszystkie węzły AST.
Z Internetu ten link http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html wydaje się najbardziej odpowiedni, ale dla mnie szczegóły techniczne rozwiązania nie są jasne.
Wszelkie sugestie są mile widziane. Wielkie dzięki.
Dlaczego chcesz utworzyć "jeden" AST dla kilku plików? Dlaczego po prostu nie możesz obsłużyć jednego AST dla każdego pliku? –
Chciałbym, żeby ktoś miał na to odpowiedź: \ Próbuję zrobić to samo teraz. –