用于解析和检查 c++ 的 Python 代码

Posted

技术标签:

【中文标题】用于解析和检查 c++ 的 Python 代码【英文标题】:Python code to parse and inspect c++ 【发布时间】:2010-03-06 18:07:50 【问题描述】:

是否有 Python 库可以让我解析 c++ 代码?

例如,假设我想解析一些 c++ 代码并查找所有类的名称及其成员函数/变量。

我可以想出几种使用正则表达式将其组合在一起的方法,但如果有现成的库会更有帮助。

【问题讨论】:

edit:我并不是在暗示通过使用正则表达式我可以正确解析 c++,因为它是一种非常规语言,所以这是荒谬的。我的意思是我需要一个正则表达式就足够了。 即使在这种有限的情况下,我怀疑您是否可以仅使用正则表达式来做到这一点。也许如果你把它缩小到没有宏或模板魔法的简单、行为良好的类(也可能没有继承)。 你试过eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang吗? 【参考方案1】:

过去我曾将gccxml 用于此类目的(一个发出易于解析的XML 的C++ 解析器)——我破解了我自己的Python 接口,但现在有一个pygccxml 应该将它打包很适合你。

【讨论】:

pygccxml 看起来很棒,我之前没有注意到。【参考方案2】:

准确地解析 C++ 与您可以使用正则表达式执行的操作相距甚远。 您需要一个完整的 C++ 解析器,而且它们很难构建。多年来,我一直在参与构建一个,并跟踪谁在做;我不知道有任何尝试in Python。

我工作的是DMS C++ Front End。 它不仅提供解析,还提供全名和类型解析。解析后,基本上可以提取出任何你喜欢的细节级别的代码的详细信息,包括函数内容的任意细节。

您可以考虑使用GCCXML,它确实包含一个解析器,并且我相信它会生成所有类、函数和***变量的名称。 GCCXML 不会为您提供任何关于函数内部的信息。

【讨论】:

【参考方案3】:

这可能有点超出您的问题范围......但取决于您想要实现的目标,也许Exuberant Ctags 值得一看。

【讨论】:

好建议,如果有可以解析ctags输出的库会更有帮助【参考方案4】:

没有尝试过,但是使用 LLVM 的 Clang 解析器中的 Python 绑定可能会起作用;见here。

【讨论】:

【参考方案5】:

pyparsing怎么样?

【讨论】:

来自该站点:“pyparsing 模块是创建和执行简单语法的另一种方法”。 1) c++ 没有“简单”的语法。 2) 大多数尝试构建 C++ 解析器的人都失败了;这是您可能想象的更大的工作。 我知道用 pyparsing 正确解析 C++ 是不可能的,但据我所知,问题的作者并没有为 C++ 构建编译器,所以 pyparsing 对他来说可能就足够了。让他做法官。 那不会有帮助,因为我必须自己编写简单的语法。感谢您的建议 ...我们不知道他真正想做什么。他清楚地说,“解析C++”。他还说,“……找名字……”但仅限于此吗?我回答了标题问题。

以上是关于用于解析和检查 c++ 的 Python 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 c++ 代码调用和运行一个已存在的 python 文件?

从 Python 中解析 Python 代码? [关闭]

c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法

Python密码保护

检查哪个工具箱用于生成 C++ 代码

解析 .py 文件,读取 AST,修改它,然后写回修改后的源代码