如何强制LLVM解析AST?

时间:2013-05-08 18:44:04

标签: c++ llvm

我有一个输入文件(.ll),我希望由LLVM解析,从而生成程序的内存中表示,然后它应该被解析并转储到stdout,但纯粹来自生成AST。我成功了一部分。 LLVM解析程序并将模块转储到stdout。但是,保留了原始源代码的格式。这可能是因为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 IR\n";
    return 1;
  }

  Mod->dump();

我的问题是:为什么在转出模块时保留了原始源代码的格式,有没有办法让LLVM删除程序的文本表示并让它实际上解析AST?

2 个答案:

答案 0 :(得分:3)

IR解析器保留格式。这样做没有意义。它只是一个用于将模块转储到stdout的IR编写器,与用于转储到.ll文件的IR编写器完全相同。因此,与输入.ll文件相比,转储中的格式总是相同,除非后者以某种方式手动生成。

答案 1 :(得分:1)

我从未注意到转储模块会保留格式,您应该再次检查它。据我所知,它不应该发生。

此外,虽然在解析IR时可能使用AST,但LLVM IR本身不是AST - 模块中没有隐藏树。