有一个很好的Python库可以解析C++吗?

csb*_*oks 50 c++ python

谷歌没有发现任何看似相关的东西.

我有一堆现有的,正在运行的C++代码,我想使用python来浏览它并找出类之间的关系等.

编辑:只是想指出:我认为我不需要或想要解析C++的每一点; 我只需要足够聪明的东西来获取类,函数和成员变量声明,并跳过函数定义.

Pav*_*aev 44

这不是一个答案,而只是为了演示实际上正确解析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?
}
Run Code Online (Sandbox Code Playgroud)

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

  • C++:人类很难,计算机更难. (5认同)
  • 邪恶,是的,但可以解析就好了.我已经通过解析此代码更新了<a href=" http://stackoverflow.com/a/17393852/120163">此SO答案</a>: (3认同)
  • @Dave:C++:对人类来说很困难,对计算机来说*不那么困难。如果不冻结我的大脑,我就无法亲自解析它。我的解析器处理得很好;没有一半的大脑可以冻结。 (2认同)

Ste*_*tef 32

众所周知,C++难以解析.大多数尝试正确执行此操作的人最终会拆分编译器.事实上,这是(部分)LLVM开始的原因:Apple需要一种解析C++的方式,以便在XCode中使用,与编译器解析它的方式相匹配.

这就是为什么像GCC_XML这样的项目可以与python xml库结合使用.

一些似乎在解析C++方面做得非常出色的非编译器项目是:

  • Eclipse CDT
  • OpenGrok
  • Doxygen的

  • 请注意,gcc-xml不会解析所有内容.具体而言,不解析函数体. (5认同)
  • +1 - gcc-xml是要走的路,除非你想要像EDG前端这样付费(且价格昂贵)的解决方案. (2认同)

小智 5

你不会找到一个drop-in Python库来做到这一点.解析C++是繁琐的,很少编写的解析器不是编译器的一部分.你可以在这里找到问题的一个很好的总结.

最好的选择可能是clang,因为它的C++支持是完善的.虽然这不是Python解决方案,但听起来它可以在Python包装器中重用,因为它强调封装和开发中的良好设计.

  • 繁琐?彻头彻尾的努力. (3认同)

jkp*_*jkp 5

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