1
我需要解析一個C++代碼文件,並使用完全限定名稱查找其中的所有函數調用。我使用libclang的Python綁定,因爲它看起來比編寫我自己的C++解析器容易,即使文檔是稀疏的。如何用libclang檢索完全限定的函數名?
實例C++代碼:
namespace a {
namespace b {
class Thing {
public:
Thing();
void DoSomething();
int DoAnotherThing();
private:
int thisThing;
};
}
}
int main()
{
a::b::Thing *thing = new a::b::Thing();
thing->DoSomething();
return 0;
}
Python腳本:
import clang.cindex
import sys
def find_function_calls(node):
if node.kind == clang.cindex.CursorKind.CALL_EXPR:
# What do I do here?
pass
for child in node.get_children():
find_function_calls(child)
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
find_function_calls(tu.cursor)
我在尋找的輸出的功能完全限定名稱的列表被稱爲是:
a::b::Thing::Thing
a::b::Thing::DoSomething
我可以通過使用node.spelling
獲得函數的「short」名稱,但我不知道如何找到它屬於的類/名稱空間。