有好的Python库可以解析C++吗?
谷歌搜索没有找到任何相关的信息。
我有一堆已经能正常工作的C++代码,我想用Python来分析这些代码,看看类与类之间的关系等等。
补充说明:我并不需要或者想要解析每一行C++代码;我只需要一个聪明点的工具,能识别出类、函数和成员变量的声明,并且跳过函数的具体定义。
13 个回答
50
这不是一个直接的答案,而是想展示一下正确解析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
添加一个构造函数,实际上你就能通过有无副作用来区分这两种情况。
41
C++ 这种语言解析起来特别困难。很多尝试正确解析它的人,最后都不得不拆解一个编译器。实际上,这也是 LLVM 项目开始的部分原因:苹果需要一种方法,能够按照编译器解析 C++ 的方式,在 XCode 中解析 C++。
所以才会有像 GCC_XML 这样的项目,你可以把它和 Python 的 XML 库结合起来使用。
一些非编译器的项目,在解析 C++ 方面表现得相当不错,包括:
- Eclipse CDT
- OpenGrok
- Doxygen