从 C/C++ 代码获取 AST,无需从 Python 应用程序编译

Get the AST from a C/C++ code without compiling from a Python application

我一直在阅读 this article (described here) 并致力于我自己的实现。在文章中,他们使用抽象语法树和一些其他功能来创建用于源代码归因的深度学习模型。

是否可以从 Python 应用程序中获取 c 或 c++ 应用程序的抽象语法树?

我的研究似乎表明,除非您可以编译代码,否则无法可靠地完成此操作。有没有办法使用 python 脚本获取其中的一部分?

在 C++ 中,您需要实际编译一个片段才能获得它的 AST。

您可以根据片段进行猜测,但不能保证。这样做的原因是来自其他地方的代码(headers,以前的代码)可能会影响任何一段代码的含义。

考虑:

int x = y + z;

你期望 AST 是什么?加法和赋值运算符。

现在,如果 z 是 Foo z;

class Foo
{
   operator int() { /* bunch of operations,*/ return 0;}
}

突然间,你的 AST 包含了更多的东西。

那么你还可以拥有:

#define z (y * y)

同样,您的 AST 发生了变化。

所以,为了让它正确,你需要整个事情,解析整个源,包括,运行 pre-processor,解析模板,可见性,重载。

在实践中,人们然后使用类似 LLVM 的东西并将责任传递给实际的编译器。