通過libclang在Python解析C++源文件時,我試圖找到(行和列)的特定函數聲明的所有引用特定函數聲明的所有引用。查找libclang(Python)的
例如:
#include <iostream>
using namespace std;
int addition (int a, int b)
{
int r;
r=a+b;
return r;
}
int main()
{
int z, q;
z = addition (5,3);
q = addition (5,5);
cout << "The first result is " << z;
cout << "The second result is " << q;
}
因此,對於上面的源文件,我想在第5行的函數聲明爲addition
,我想find_all_function_decl_references
(見下文),以返回addition
的參考文獻在線路15和16
我曾嘗試這個(改編自here)
import clang.cindex
import ccsyspath
index = clang.cindex.Index.create()
translation_unit = index.parse(filename, args=args)
for node in translation_unit.cursor.walk_preorder():
node_definition = node.get_definition()
if node.location.file is None:
continue
if node.location.file.name != sourcefile:
continue
if node_def is None:
pass
if node.kind.name == 'FUNCTION_DECL':
if node.kind.is_reference():
find_all_function_decl_references(node_definition.displayname) # TODO
另一種方法是存儲列表中的所有函數聲明,並在每個函數上運行find_all_function_decl_references
方法。
有沒有人有任何想法如何解決這個問題?這個find_all_function_decl_references
方法將如何? (我對libclang
和Python非常感興趣。)
我看過thisdef find_typerefs
找到了某種類型的所有引用,但我不知道如何實現它以滿足我的需要。
理想情況下,我希望能夠獲取任何聲明的所有引用;不僅是功能,但是變量聲明,聲明的參數(如在本例中第7行a
和b
以上),類聲明等
編輯 繼Andrew's評論,這裏有一些細節對我的設置規範:
- LLVM 3.8.0-Win64的
- libclang-PY 3 3.8.1
- Python3.5.1(在Windows中,我假設的CPython)
- 對於
args
,我嘗試了回答here中提出的問題以及another答案中的問題。
*請注意,鑑於我的小編程經驗,我可以通過簡短的解釋它的工作原理來欣賞答案。
不爲鐺/ Python,但看到http://stackoverflow.com/a/37149988/120163另一個變化上如何「找到所有對特定符號/運算符的引用」 –
@IraBaxter感謝您的鏈接,但我只關心通過'libclang'實現這一點。 – Karim