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



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

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

我的研究似乎表明,除非你能编译代码,否则这是不可靠的。有没有一种方法可以使用python脚本获得其中的一部分?

在C++中,您需要实际编译一个代码段来获得其AST。

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

考虑:

int x = y + z;

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

现在,如果z是Foo z;怎么办

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

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

然后你也可以有:

#define z (y * y)

再次,你的AST发生变化。

因此,为了得到正确的结果,你需要整个事情,解析整个源,包括,运行预处理器,解析模板,可见性,重载。

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

最新更新