问题标签 [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.
c++ - 如何使用 libclang 获取枚举元素的数值?
假设我有一个枚举定义,例如:
我想以编程方式从任何给定的枚举定义生成映射,其中键是枚举元素的名称,值是枚举元素的数值(例如myMap["TwoAgain"] == 2
)
到目前为止,我知道如何使用 遍历源文件clang_visitChildren()
,并使用clang_tokenize()
. 通过 AST 递归,我按以下顺序获取游标/标记:
- “我的枚举”(CXType_Enum)
- “第一”(CXToken_Identifier)
- "=" (CXToken_Punctuation)
- "1" (CXToken_Literal)
- “无符号整数”(CXType_UInt)
- "1" (CXToken_Literal)
- “我的枚举”(CXType_Enum)
- “第二”(CXToken_Identifier)
- “我的枚举”(CXType_Enum)
- “第三”(CXToken_Identifier)
- “我的枚举”(CXType_Enum)
- "TwoAgain" (CXToken_Identifier)
- "=" (CXToken_Punctuation)
- “第二”(CXToken_Identifier)
- “无符号整数”(CXType_UInt)
- “第二”(CXToken_Identifier)
我想我可以编写一个算法,使用这些信息来计算每个值。但是,我想知道是否有更简单的方法?我可以直接从 libclang API 获取数值吗?
python - Parse C Array Size with Python & LibClang
I am currently using Python to parse a C file using LibClang
. I've encountered a problem while reading a C-array which size is defined by a define-directive-variable.
With node.get_children i can perfectly read the following array:
As soon as the array size is replaced with a variable, the array won't be read correctly. The following array code can't be read.
Actually the parser stops at MAX and in the dump there is the error: invalid sloc.
How can I solve this?
Thanks
python - 如何使用 clang 获取变量定义的字面位置
我有以下情况。
some_header.h
源文件.c
现在使用 clang 我可以转储 AST 并查看它是否知道这些变量的字面定义:
我正在尝试使用 libclang 和 python 获取这些信息,但到目前为止我还没有成功。
我需要在哪里查找这些信息?这些信息在 C 接口中是否可用,但可能尚未移植到 Python?
clang - Libclang 返回不正确的游标类型(stdlib 和命名空间类型)
我正在使用 libclang 来做一些 C++ 的基本反射。我正在为标题创建一个翻译单元,然后使用光标访问所有树元素,在某些情况下,我会退回到 qualtypes 以获取必要的信息。现在的问题是 libclang 返回的游标类型不正确。对于下面的示例头文件:
我使用带有以下输入的clang_parseTranslationUnit2对其进行解析:
参数: “-x”,“c++”
选项: CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_Incomplete;
现在,当访问 struct BI 的字段时,请获取:
CXType_Int用于光标到 m_vector 而不是CXtype_Unexposed
但是对于std::string成员 m_string,我得到CXType_Unexposed,它允许我访问该字段并提取必要的信息。当访问字符串的字段时,我正确地获得了“命名空间”,然后是“typeref”游标类型。
我完全不知道发生了什么,为什么 lib clang 无法理解 std::vector 类型?
我在 2015 年 6 月 1 日获得了最新的 libclang 版本。
c++ - 如何使用 Clang C++ API 获取声明的令牌?
我有我自己的递归 AST 访问者类,clang::ASTContext
里面有对象:
然后我想访问,例如,所有命名空间声明并着色它们的名称:
这只是一个例子。即使有一种方法可以在没有标记的情况下获取命名空间名称的位置,但我对更全局的方法感兴趣。
有没有办法“跳转”到声明源范围内的标记并遍历它们?
llvm - 使用 libclang 和 LLVM C 进行即时编译
我有一个能够生成我想在即时编译上下文中使用的 C 代码的软件。据我了解,LLVM/Clang 是要走的路,为了项目的可维护性,我想使用 llvm 和 Clang (libclang) 的 C API。
我开始使用创建 libclang 上下文clang_createIndex
和使用翻译单元createTranslationUnitFromSourceFile
(如果能够避免通过文件系统并将源代码作为字符串传递,那就太好了)。但我几乎被困在那里。如何从 libclang 翻译单元转到 JIT 似乎需要的 LLVM“执行引擎”?或者这甚至不可能使用 C API?
c++ - Libclang 解析错误
我将 libclang 与 qt 一起使用,以便为我的自定义 IDE 创建自动完成功能。
我做了这个功能:
但它不起作用。输出显示错误代码 = 1(libclang 文档中的未知错误)。而且,filen
是在调用parse函数前后修改的。例子:
C:/Users/Yoann/AppData/Local/Temp/plugin-test.Ns4152
C:\Dev\Qt\Qt5.5.0\Tools\mingw492_32\include\c++\4.9.2
谢谢,
c++ - 以clang格式的控制语句后中断
我BreakBeforeBraces: Allman
在我的.clang-format
文件中使用,但控制语句中的大括号(例如if
, for
, while
, ...)没有放在它们自己的行上。
我读过您可以在 中为大括号设置嵌套配置类BraceWrapping
,但我无法找出正确的 YAML 语法(以及 sublime 文本插件的 JSON 语法),并且找不到任何现有示例。
有没有办法做到这一点?
python - get_includes 找不到标准库头文件
我正在玩弄 libclang 的 Python 绑定。目前,我正在尝试执行一些非常简单的任务,例如查找 C++ 文件中包含的所有标头。我使用的代码如下:
该文件hello.cpp
如下:
文件hello.h
如下:
我认为上面的代码会打印iostream
,stdio.h
和,如果考虑到传递包含hello.h
,可能甚至更多。list
但是,它只打印./hello.h
,公然忽略标准库头文件。
我在文档中找不到任何关于它是否是设计的东西。是设计使然吗?如果是这样,有什么方法可以实际获取文件包含的所有标题clang.cindex
,包括标准库的标题?
c - libclang ,clang_Cursor_isAnonymous 什么是匿名声明?
我很难理解什么是匿名结构声明(或联合)。
从这个链接: http ://clang.llvm.org/doxygen/classclang_1_1RecordDecl.html#ad2dd151523eecb8d15149cc0937c3dff
这是一个匿名声明
而不是这个
但是如果我做一些测试:
使用被解析的文件(record_decls.c):
我有这个输出:
这意味着我所有的声明都返回相同的值形式clang_Cursor_isAnonymous
这意味着我真的不知道这是标题中的评论: