Мне нужно проанализировать файл кода на C++ и найти в нем все вызовы функций с полными именами. Я использую привязки Python от libclang, потому что это кажется проще, чем писать собственный 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
, но я не знаю, как найти класс/пространство имен, к которому он принадлежит.