如何在Python中解析C++源码?

14 投票
7 回答
7183 浏览
提问于 2025-04-16 11:07

我们想要解析我们庞大的C++源代码树,以获取足够的信息,供另一个工具制作类和对象关系的图表,了解整体结构等等。

到目前为止,我最好的尝试是写了一个Python脚本,它会扫描所有的.cpp和.h文件,使用正则表达式来检测类的声明、方法等等。我们不需要一个复杂的分析器来捕捉每一个细节,也不需要一个重型的UML图生成器——有很多细节我们想要忽略,而且我们还在发明新的图表类型。这个脚本勉强能用,但说实话,C++ 确实很难解析!

所以我想知道有什么工具可以从我们的源代码中提取我们想要的信息?我不是语言专家,也不想要学习曲线陡峭的东西。我们这些普通程序员能用的工具就好 :P

Python是这里的标准语言之一,但不是必须的。

7 个回答

3

你能运行一个预处理步骤吗?Doxygen 可以解析大部分 C++ 语法,并生成包含所有关系的 XML 文件。编译器也会创建调试数据库(通常是 gcc 的 dwarf 格式和 MSC 的 codeview 格式)。

6

你可以看看 GccXML 和 OpenC++,还有 doxygen。

11

我推荐你使用Clang

Clang是一个基于C++的编译器,它的设计考虑到了易于重复使用。这意味着你可以仅仅用它来解析代码和生成一个抽象语法树。它会处理所有那些繁琐的操作符重载解析、模板实例化等等。

Clang提供了一个基于C的接口,并且还扩展了Python绑定。这个接口通常功能很强大,不过我自己没有使用过。如果你想帮助扩展它,欢迎你贡献代码。

撰写回答