如何强制LLVM取消解析AST
How to force LLVM to unparse the AST?
我有一个输入文件(.ll),我想通过LLVM解析它,从而生成程序的内存表示,然后它应该被解解析并转储到标准输出,但纯粹是从生成的AST。LLVM解析程序并将模块转储到标准输出。然而,原始源代码的格式被保留。这使得他认为LLVM并没有真正解析AST来转储模块,相反,LLVM可能会将文本表示与内存中的AST一起存储,并且在没有进行任何更改的情况下,更倾向于转储此文本表示,这不是我想要的。
std::cout << "Reading IR ...n";
LLVMContext &Context = getGlobalContext();
SMDiagnostic Err;
Module *Mod = ParseIRFile(argv[1], Err, Context);
if (!Mod) {
std::cerr << "Problems reading IRn";
return 1;
}
Mod->dump();
我的问题是:为什么在转储模块时保留原始源代码的格式,并且有一种方法可以使LLVM删除程序的文本表示并使其实际上取消解析AST?
IR解析器不保留格式。这样做没有意义。它只是一个用于将模块转储到标准输出的IR写入器,与用于转储到.ll文件的写入器完全相同。因此,与输入.ll文件相比,转储文件中的格式总是相同的,除非后者是手工生成的。
我从来没有注意到转储模块会保留格式,您应该再检查一次。据我所知,这是不应该发生的。
此外,虽然在解析IR时可能使用AST,但LLVM IR本身并不是AST -在模块中没有隐藏树。
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++取消引用指针.为什么会发生变化
- 如何克服提升精神AST混乱
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 如何在Qt中取消捕获字符串
- 如何使用 TStyleManager::UnRegisterStyle() 取消注册样式
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- clang 插件:在编译过程中修改 AST
- C++ 关于指针取消引用的技术问题
- 没有取消引用/解包对象的标准方法?
- Boost.Spirit将表达转换为AST
- 列表 iter 不取消引用 使用列表进行插入排序
- 类继承,ENUM 与 AST 类实现的问题
- C++宏定义和取消定义
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 如何强制LLVM取消解析AST