问题标签 [libclang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
141 浏览

python - LibClang Python 绑定函数“getOverridden”

LibClang 公开了一个函数来“确定被给定方法覆盖的方法集”(在此处解释)。然而,这个函数似乎没有在 python 绑定中公开。有人可以解释如何将此功能添加到绑定中还是我只是没有找到它?

0 投票
0 回答
63 浏览

c++ - 在 CXXRecordDecl 中找不到未定义的基类

仅在此代码上使用 clang::ParseAST 时(不多也不少)

我无法获得有关 B 和 C 的信息,它们似乎完全被忽略并且在循环时不存在

我可以在某处找到有关这些基本声明的信息,即使它们显然是“未定义的符号”?

0 投票
2 回答
1932 浏览

c++ - libclang: how to get token semantics

libclang defines only 5 types of tokens:

  • CXToken_Punctuation
  • CXToken_Keyword
  • CXToken_Identifier
  • CXToken_Literal
  • CXToken_Comment

Is it possible to get a more detailed information about tokens? For example, for the following source code:

I would expect the output to be like:

  • struct - keyword
  • Type - type name
  • ; - punctuation
  • void - type/keyword
  • foo - function name
  • ( - punctuation
  • Type - type of the function parameter
  • param - function parameter name
  • ) - punctuation
  • ; - punctuation

I also need to map those entities to file locations.

0 投票
1 回答
9130 浏览

python - 在 Python 中使用 libclang 在 C++ 中进行解析

经过一些研究和几个问题,我最终探索了libclang库,以便在 Python 中解析 C++ 源文件。

给定一个 C++ 源代码

我试图将标记标识 fac为函数名称、n变量名称、i变量名称、mean变量名称以及每个位置。我有兴趣最终将它们标记化

我已经阅读了一些非常有用的文章(eli 的Gaetan 的)以及一些堆栈溢出问题3511319713236500

但是,鉴于我是 Python 新手并且努力理解 libclang 的基础知识,我非常感谢一些示例代码块,它实现了上述内容,以便我从中学习和理解。

0 投票
1 回答
2200 浏览

python - 用 libclang 解析;无法解析某些标记(Windows 中的 Python)

我有一些代码(取自并改编自此处此处),它使用libclang 来解析Python(Widnows)中的 C++ 源文件并获取其所有声明语句,如下所示:

对于以下 C++ 源文件 ( test_ok.cpp):

parse方法按应有的方式解析并输出:

然而

对于以下 C++ 源文件 ( test.cpp):

解析不完整

解析无法处理诸如vector<double>& numbersetc 之类的行,并停止解析该部分代码。

我相信这个问题与另一个SO question中描述的问题相似。我试图显式使用std=c++11parse 参数但没有成功。在该问题的答案中(即使它没有解决问题)-x c++也建议使用,但我不知道如何在上面的代码中添加它

任何人都可以指出 libclang 解析 C++ 语句的解决方案,如test.cpp?

另外,我可以让它继续解析,即使它得到一个它无法解析的令牌?

0 投票
1 回答
1811 浏览

python - libclang:添加编译器系统包含路径(Windows 中的 Python)

按照这个问题Andrew 的建议,我试图让liblang 添加编译器系统包含路径(在 Windows 中),以便我的 Python 代码

完全解析像这样 C++ 源文件

现在,如果没有正确设置编译器系统包含路径(使用 Windows),我会得到以下输出:

不幸的是,我无法理解这种方法(Python 和 Clang 中的新功能)或如何在我的 Python 代码中实现此解决方案。

我也尝试过ccsyspath,但我没有“为 Windows 调整它”的技能。

任何人都知道如何解决这个问题?

0 投票
1 回答
4629 浏览

python - 在 libclang (Python) 中查找特定函数声明的所有引用

在 Python 中通过 libclang 解析 C++ 源文件时,我试图查找(行和列位置)特定函数声明的所有引用。

例如:

所以,对于上面的源文件,我想要addition第 5 行的函数声明,我想要find_all_function_decl_references(见下文)返回第addition15 行和第 16 行的引用。

我试过这个(改编自这里

另一种方法是存储在列表中找到的所有函数声明并find_all_function_decl_references在每个函数声明上运行该方法。

有谁知道如何解决这个问题?这种find_all_function_decl_references方法会如何?(我对libclangPython 很陌生。)

我已经看到正在查找对某种类型的def find_typerefs所有引用,但我不确定如何根据我的需要实现它。

理想情况下,我希望能够获取任何声明的所有引用;不仅是函数,还有变量声明、参数声明(例如上面第 7 行示例中的ab)、类声明等。

编辑 根据Andrew 的评论,以下是有关我的设置规范的一些详细信息:

  • LLVM 3.8.0-win64
  • libclang-py3 3.8.1
  • Python3.5.1(在 Windows 中,我假设为 CPython)
  • 对于args,我尝试了此处答案中建议的方法和另一个答案中建议的方法。

*请注意,鉴于我的小型编程经验,我可以通过简要说明它的工作原理来感谢答案。

0 投票
2 回答
818 浏览

python - 获取 lib clang 光标/类型的实际拼写

我编写了一个脚本来检测我的 C++ 代码中的格式错误。(例如确保所有成员变量都以 为前缀m_)。我想做的一件事是确保作为指针的类型将星号附加到类型(int* num, not int *num)。

所以我需要获取源代码中的类型文本。然而,获取光标或类型的拼写会返回一个漂亮的打印版本,它总是会返回int *,即使源有int*.

为了解决这个问题,我获取了光标的范围并从源文件中获取子字符串并进行检查。但是似乎没有办法获得类型的范围,所以我无法获得它的实际拼写?有没有办法做到这一点?也许通过获取类型的标记然后获取这些标记?

(我正在使用 python 绑定,但如有必要可以切换到 C API)

0 投票
1 回答
334 浏览

python - sublime text 3 插件主机崩溃恢复

我为 Sublime Text 3 开发了一个插件,我的 python 代码使用 c 类型绑定来铿锵。有时调用 libclang 会出现段错误libclang: crash detected during reparsing(我还不明白原因,但这与这个问题无关)。这会导致插件主机崩溃。

所以问题是:在 python 中有什么方法可以从底层 c 绑定的失败中恢复?我很乐意在我遇到崩溃的这个特定文件上跳过这个操作。

谢谢!

UPD:评论中有一个简短的讨论,进一步详细说明缺乏适当的小型可重复示例是有意义的。这不是我懒惰的原因,我确实努力让我希望帮助的人尽可能容易地理解这个问题。但在这种情况下,这真的很难。最初的问题是由 libclang 段错误在一些我还没有确定的奇怪情况下引起的。它可能与一个在不支持 c++11 的情况下编译的库和另一个在使用 c++11 支持的情况下编译的库有关,但我想强调 - 这与问题无关。这里的问题是 python 调用的东西有一个段错误,这个段错误导致 Sublime Text plugin_host 退出。所以这里有一个简单的例子,但不是因为缺乏尝试。如果您有如何构建一个的想法,我也愿意接受建议。很抱歉这个问题的质量很差,这是我目前最好的。

0 投票
1 回答
284 浏览

c++ - 为 libclang 全局设置 -D 宏编译器标志

我正在尝试为代码(使用基于 AST 的突变生成器)生成突变,以便编译使用 -D 宏。我可以使用 clang 使用此命令生成 AST 转储

clang -Xclang -ast-dump -fsyntax-only -DFLAG=0 -DOTHER_FLAG file.c

但是,突变生成器工具 (Milu) 使用 libclang 来解析 c 代码并生成 AST。如果没有这些宏,libclang 无法正确解析代码,也无法在代码中添加#defines。我想全局设置这些 -D 宏。

例如,我可以设置一个由 libclang 读取的环境变量 C_INCLUDE_PATH。我想知道我是否可以为 -D 宏做类似的事情。