2013-02-15 62 views
8

我正在用clang進行程序間數據流分析。目前我使用libtooling解析源文件並調用AST訪問者。 問題是如何爲多個.c文件創建單個AST?AST與多個源文件的叮噹

我試過使用ASTImport類,但它不支持導入一些AST節點。而且,當我創建和操作CompilerIstance並在析構函數中崩潰時,我做錯了什麼。

一個非常類似的選項是ASTImportAction,但在這種情況下,我不清楚哪些命令行參數應該傳遞給ClangTool。

第三種選擇是爲每個.c文件創建ASTUnits,並在每個文件中查找定義,但不清楚如何找到用戶定義類型之間的對應關係,例如,記錄。在ASTImport中,它們使用IsStructurallyEquivalent()函數,但是它在匿名命名空間中聲明,因此我只能將所有代碼複製到我的程序中。並且它也支持不是所有的AST節點。

來自互聯網這個鏈接http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-August/023865.html似乎是最合適的,但對我來說,解決方案的技術細節不清楚。

歡迎任何建議。 非常感謝。

+1

爲什麼要爲幾個文件生成「一個」AST?爲什麼你不能簡單地爲每個文件處理一個AST? – 2013-03-12 03:49:38

+1

我希望有人有這樣的答案:\我現在正在嘗試做同樣的事情。 – 2016-07-13 05:47:02

回答

0

我正在嘗試做類似的事情。儘管我沒有嘗試創建一個AST。我正在解析多個AST,並試圖自己映射這些函數。 我正在使用AST匹配器來獲取函數調用,然後在其他AST中檢查它們。

我正在使用compile_commands.json文件來提供源文件列表。 OptionsParser.getCompilations()。getAllFiles()可以獲得在compile_commands.json中指定的所有源文件。

當我們創建一個clangTool並使用我們的匹配器對該工具運行frontendAction時,它會在所有源文件中搜索匹配項。

可能有更好的方法來做到這一點。如果有人知道它,請指出。