gpt4 book ai didi

c++ - libclang 获取原始值

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:19 29 4
gpt4 key购买 nike

如何使用 libclang 获取原始文字的值?

例如,如果我有一个游标类型为 CXCursor_IntegerLiteral 的 CXCursor,我该如何提取文字值。


更新:

我在使用 libclang 时遇到了很多问题。我强烈建议完全避免使用它,而是使用 clang 提供的 C++ 接口(interface)。 C++ 接口(interface)非常有用并且有很好的文档记录:http://clang.llvm.org/doxygen/annotated.html

我现在看到 libclang 的唯一目的是为您生成 ASTUnit 对象,就像下面的代码一样(否则并不容易):

ASTUnit * astUnit;
{
index = clang_createIndex(0, 0);
tu = clang_parseTranslationUnit(
index, 0,
clangArgs, nClangArgs,
0, 0, CXTranslationUnit_None
);
astUnit = static_cast<ASTUnit *>(tu->TUData);
}

现在您可能会说 libclang 是稳定的,而 C++ 接口(interface)不是。这无关紧要,因为你花在用 libclang 弄清楚 AST 和用它创建 kludges 上的时间无论如何都会浪费你很多时间。我会尽快花几个小时修复在版本升级后无法编译的代码(如果需要的话)。

最佳答案

无需重新解析原文,您已经在翻译单元中获得了所需的所有信息:

if (kind == CXCursor_IntegerLiteral)
{
CXSourceRange range = clang_getCursorExtent(cursor);
CXToken *tokens = 0;
unsigned int nTokens = 0;
clang_tokenize(tu, range, &tokens, &nTokens);
for (unsigned int i = 0; i < nTokens; i++)
{
CXString spelling = clang_getTokenSpelling(tu, tokens[i]);
printf("token = %s\n", clang_getCString(spelling));
clang_disposeString(spelling);
}
clang_disposeTokens(tu, tokens, nTokens);
}

您会看到第一个标记是整数本身,下一个是不相关的(例如,它是 ; for int i = 42;

关于c++ - libclang 获取原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692015/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com