有一个能解析C++的好的Python库吗?

2024-04-25 04:14:38 发布

您现在位置:Python中文网/ 问答频道 /正文

谷歌没有发现任何看起来相关的东西。

我有一组现有的、工作的C++代码,我想使用Python爬行并找出类之间的关系等等。 <>编辑:只是想指出:我不认为我需要或想要解析C++的每一个比特,我只需要足够聪明的东西来学习类、函数和成员变量声明,跳过函数定义。


Tags: 函数代码声明编辑定义关系成员
3条回答

多年来,我一直在使用pygccxml,这是一个围绕GCC-XML的非常好的Python包装器。这是一个功能非常丰富的包,它构成了一些使用良好的代码生成工具的基础,比如py++,它来自同一个作者。

众所周知,C++是很难解析的。大多数试图正确执行此操作的人最终都会拆开编译器。事实上,这部分是LLVM启动的原因:苹果需要一种方法来解析C++,以便与编译器解析它的方式相匹配。

这就是为什么有像GCC_XML这样的项目可以与python xml库结合在一起。

一些在解析C++方面表现不错的非编译器项目是:

  • 日蚀CDT
  • OpenGrok公司
  • 强氧

不是这样的答案,而是为了演示如何正确地解析C++的真实性。我最喜欢的演示:

template<bool> struct a_t;

template<> struct a_t<true> {
    template<int> struct b {};
};

template<> struct a_t<false> {
    enum { b };
};

typedef a_t<sizeof(void*)==sizeof(int)> a;

enum { c, d };
int main() {
    a::b<c>d; // declaration or expression?
}

这是完全有效的,标准兼容的C++,但是注释行的确切含义取决于您的实现。如果sizeof(void*)==sizeof(int)(在32位平台上是典型的),则它是a::b<c>类型的局部变量d的声明。如果条件不成立,那么它就是一个无操作表达((a::b < c) > d)。为a::b添加构造函数实际上会让您通过存在/不存在副作用来暴露差异。

相关问题 更多 >