用于解析和检查 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 文件?
c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法