clang相关内容

如何以 JSON 格式表示 clang AST?

clang-check -ast-dump -ast-dump-filter=main.c 给出了特定代码的 AST(只是一个函数声明). 我们如何以 JSON 格式表示生成的 AST? PS:我只想要 AST 用于函数声明. 解决方案 使用 -ast-dump=json 参数调用 clang. 这是最近才实施的(2019 年 5 月),因此您需要最新版本的 Clang. ..
发布时间:2021-11-26 18:05:59 其他开发

如何使用 Clang 从一串 C++ 生成 AST?

我正在尝试使用 Clang 来操作 C++ 源代码,但是我在发现 API 时遇到了麻烦. 我想获取一串 C++ 源代码并从中生成一个 AST;类似的东西: auto myAst = clang::parse("auto x = 1 + 1;"); 是否有一个最小的工作示例? 解决方案 可以试试下一个代码: std::unique_ptrAST(tooling::buildAST ..
发布时间:2021-11-26 18:03:31 C/C++开发

如何让 clang 转储没有颜色的 AST?

使用 clang-check 转储源代码的 AST,可以使用以下命令完成: $ clang-check -ast-dump file.c -- 但是,此命令的输出将在终端中显示为彩色. 当我将输出定向到文件时,我遇到了所有颜色转义码: $ clang-check -ast-dump file.c -- >输出.txt 示例: [0;1;32mTranslationUnitDecl[0m ..
发布时间:2021-11-26 18:03:05 其他开发

Clang 项目的 AST

我使用 Clang python 绑定来提取 c/c++ 文件的 AST.它非常适合我编写的一个简单程序.问题是当我想将它用于像 openssl 这样的大项目时.我可以为项目的任何单个文件运行 clang,但是 clang 似乎错过了项目的一些标题,并且只给了我文件的几个函数的 AST,而不是所有函数.我通过 -I 设置了包含文件夹,但仍然获得了部分功能. 这是我的代码: import c ..
发布时间:2021-11-26 18:02:36 其他开发

如何仅从 clang AST 获取函数声明?

我想为我的 C 程序使用 AST,并希望以 json 格式表示.为此,我使用了 clang -Xclang -ast-dump=json -fSyntax-only main.c 命令.它给了一个AST.但是 AST 包含 typeDecl、Value 声明 等以及 function 声明. 我只需要一个函数声明,以 JSON 形式形成我的代码.怎样才能做到这一点? 这是一个替代的 c ..
发布时间:2021-11-26 18:01:09 其他开发

Clang AST 访问者,避免遍历包含文件

您好,我正在尝试实现 AST Clang 访问者,这是我的代码. class ExampleVisitor : public RecursiveASTVisitor{私人的:ASTContext *astContext;//用于获取额外的 AST 信息民众:virtual bool VisitVarDecl(VarDecl *var){numVariables++;string varName ..
发布时间:2021-11-26 18:00:31 C/C++开发

使用 clang AST 解析器忽略丢失的标头

我在 Windows 上,使用 MSVC 编译我的项目,但我需要 clang 来使用它整洁的 AST 解析器,它允许我编写一个小代码生成器. 问题是,clang 无法解析 MSVC 标头(一个众所周知且易于理解的问题). 我尝试了两个选项: 我包含了 MSVC 标头文件夹,解析包含在我的代码中的内置标头最终会在某个时候导致致命错误,从而阻止我正确解析我想要的部分. 我之前所做的只是 ..
发布时间:2021-11-26 17:59:33 C/C++开发

clang:自定义属性在 AST 中不可见

我在 clang 中实现了一个自定义属性,如官方手册中所述:http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute 所以我在 Attr.td 中添加了以下代码: def MyAttr: InheritableAttr {let Spellings = [GNU, CXX11, GCC, Declspec ..
发布时间:2021-11-26 17:59:07 C/C++开发

在 Clang AST 中查找声明的父级

我正在使用 clang 进行一些分析,我需要在 AST 中找到声明的父级.例如,在下面的代码中,我有 int x 并且我想获得它的父级,它应该是函数声明: int main(int x) { return 0 } 我知道这个链接中提到的http://comments.gmane.org/gmane.comp.compilers.clang.devel/2152 有一个 ParentMa ..
发布时间:2021-11-26 17:56:00 C/C++开发

如何使用 Clang 查找所有成员字段读/写?

给定一个 C++ 源代码,我想找到每个函数写入和读取的类字段.使用 Clang 前端执行此操作的最佳方法是什么? (我不是要求对所有步骤进行详细解释;但是,如果能找到一个有效解决方案的起点会很棒.) 到目前为止,我尝试使用 RecursiveASTVisitor 解析语句,但是很难跟踪节点连接.另外,我不知道如何跟踪如下内容: int&x = m_int_field;x++; 这显 ..
发布时间:2021-11-26 17:55:48 C/C++开发

使用 Clang AST 打印函数的参数

我想获取传递给函数的参数.例如,如果我有电话 printf("%d%d", i, j); 输出应该是 %d%d i j 我可以在 RecursiveASTVisitor 中使用 VisitCallExpr() 进行函数调用.还能够获取参数的数量和参数类型.但我不知道如何获得参数. bool MyRecursiveASTVisitor::VisitCallExpr (c ..
发布时间:2021-11-26 17:55:39 C/C++开发

Clang:AST(抽象语法树)是什么样的?

嗨,我是编译器开发的新手,想知道 AST 是什么样的.我有一小段代码,我使用 Clang 来生成 AST.我没有从中得到太多信息.从它的外观来看,语法树与源代码完全相同,除了一个结构体被添加到我测试的几乎所有样本中. 来源: class A {民众:int *a, *b, *c;国际我;无效总和(){a = new int[5];b = 新 int[5];c = 新整数[5];for (i ..
发布时间:2021-11-26 17:54:13 C/C++开发

如何在clang中从AST中排除标题?

我正在使用 clang 生成 AST.我有以下文件(lambda.cpp)要解析: #include 无效 my_lambda(){auto lambda = [](auto x, auto y) {return x + y;};std::cout ..
发布时间:2021-11-26 17:51:49 C/C++开发

Clang AST 解释

我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解 ..
发布时间:2021-11-26 17:51:29 其他开发

Clang AST 解释

我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解 ..
发布时间:2021-11-26 17:51:17 其他开发

将节点添加到 Clang 的 AST

我需要向 AST 插入新节点.例如,为函数添加命名空间:转这个 - void foo(); 进入这个 - 命名空间栏{无效的 foo();} 我阅读了如何克隆或创建clang 的 AST Stmt 节点? 但我不喜欢使用源到源编译 Tnx 解决方案 可以在这里找到答案http://clang-developer.42468.n3.nabble.com/Adding-nodes ..
发布时间:2021-11-26 17:47:07 其他开发

如何使用 Clang 的 AST?

我正在考虑将 Clang 的 AST 用于我的 C 代码,并对 AST 进行一些分析.关于从哪里开始、如何获得 Clang 的 AST、教程或这方面的任何内容的一些指示将有很大帮助!!! 我一直试图找到一些,我得到了这个 link2年前.但由于某种原因,它对我不起作用.教程中的示例代码给了我太多错误.所以我不确定,我是否正确构建了代码,或者教程是否有问题.但我也很乐意从其他页面开始. ..
发布时间:2021-11-26 17:45:18 其他开发

如何查看 Clang AST?

我正试图抓住 Clang.所以,我想在解析给定程序后查看 Clang 生成的 AST.是否可以以 .dot 或 .viz 格式转储 AST?有什么工具吗? 解决方案 Clang 支持使用 Graphviz 的 dotty 显示 AST -- 你可以抓取生成的临时 .dot 文件(名称被打印出来)获取图源. clang -cc1 -ast-view your_file.c 您还可以使用以 ..
发布时间:2021-11-26 17:44:38 其他开发

创建LLVM IR的方法

我正在创建 clang 工具,我想从 clang AST 生成 LLVM IR.我知道可以用来获取 *.ll 文件的 -emit-llvm 选项,但是有没有办法在代码中生成 IR?我可以调用的一些方法接受 clang AST 或 AST 上下文并返回 llvm::Module?我找不到任何可以说明这一点的示例. 已编辑:所以我尝试为此使用 CodeGenAction,但我无法让它工作.我最终 ..
发布时间:2021-11-26 17:43:27 其他开发