问题标签 [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.
python - LibClang Python 绑定函数“getOverridden”
LibClang 公开了一个函数来“确定被给定方法覆盖的方法集”(在此处解释)。然而,这个函数似乎没有在 python 绑定中公开。有人可以解释如何将此功能添加到绑定中还是我只是没有找到它?
c++ - 在 CXXRecordDecl 中找不到未定义的基类
仅在此代码上使用 clang::ParseAST 时(不多也不少)
我无法获得有关 B 和 C 的信息,它们似乎完全被忽略并且在循环时不存在
我可以在某处找到有关这些基本声明的信息,即使它们显然是“未定义的符号”?
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.
python - 用 libclang 解析;无法解析某些标记(Windows 中的 Python)
我有一些代码(取自并改编自此处和此处),它使用libclang 来解析Python(Widnows)中的 C++ 源文件并获取其所有声明语句,如下所示:
对于以下 C++ 源文件 ( test_ok.cpp
):
该parse
方法按应有的方式解析并输出:
然而,
对于以下 C++ 源文件 ( test.cpp
):
解析不完整:
解析无法处理诸如vector<double>& numbers
etc 之类的行,并停止解析该部分代码。
我相信这个问题与另一个SO question中描述的问题相似。我试图显式使用std=c++11
parse 参数但没有成功。在该问题的答案中(即使它没有解决问题)-x c++
也建议使用,但我不知道如何在上面的代码中添加它。
任何人都可以指出 libclang 解析 C++ 语句的解决方案,如test.cpp
?
另外,我可以让它继续解析,即使它得到一个它无法解析的令牌?
python - 在 libclang (Python) 中查找特定函数声明的所有引用
在 Python 中通过 libclang 解析 C++ 源文件时,我试图查找(行和列位置)特定函数声明的所有引用。
例如:
所以,对于上面的源文件,我想要addition
第 5 行的函数声明,我想要find_all_function_decl_references
(见下文)返回第addition
15 行和第 16 行的引用。
我试过这个(改编自这里)
另一种方法是存储在列表中找到的所有函数声明并find_all_function_decl_references
在每个函数声明上运行该方法。
有谁知道如何解决这个问题?这种find_all_function_decl_references
方法会如何?(我对libclang
Python 很陌生。)
我已经看到它正在查找对某种类型的def find_typerefs
所有引用,但我不确定如何根据我的需要实现它。
理想情况下,我希望能够获取任何声明的所有引用;不仅是函数,还有变量声明、参数声明(例如上面第 7 行示例中的a
和b
)、类声明等。
编辑 根据Andrew 的评论,以下是有关我的设置规范的一些详细信息:
- LLVM 3.8.0-win64
- libclang-py3 3.8.1
- Python3.5.1(在 Windows 中,我假设为 CPython)
- 对于
args
,我尝试了此处答案中建议的方法和另一个答案中建议的方法。
*请注意,鉴于我的小型编程经验,我可以通过简要说明它的工作原理来感谢答案。
python - 获取 lib clang 光标/类型的实际拼写
我编写了一个脚本来检测我的 C++ 代码中的格式错误。(例如确保所有成员变量都以 为前缀m_
)。我想做的一件事是确保作为指针的类型将星号附加到类型(int* num
, not int *num
)。
所以我需要获取源代码中的类型文本。然而,获取光标或类型的拼写会返回一个漂亮的打印版本,它总是会返回int *
,即使源有int*
.
为了解决这个问题,我获取了光标的范围并从源文件中获取子字符串并进行检查。但是似乎没有办法获得类型的范围,所以我无法获得它的实际拼写?有没有办法做到这一点?也许通过获取类型的标记然后获取这些标记?
(我正在使用 python 绑定,但如有必要可以切换到 C API)
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 退出。所以这里有一个简单的例子,但不是因为缺乏尝试。如果您有如何构建一个的想法,我也愿意接受建议。很抱歉这个问题的质量很差,这是我目前最好的。
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 宏做类似的事情。