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

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

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

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

【问题讨论】:

  • edit:我并不是在暗示通过使用正则表达式我可以正确解析 c++,因为它是一种非常规语言,所以这是荒谬的。我的意思是我需要一个正则表达式就足够了。
  • 即使在这种有限的情况下,我怀疑您是否可以仅使用正则表达式来做到这一点。也许如果你把它缩小到没有宏或模板魔法的简单、行为良好的类(也可能没有继承)。

标签: c++ python


【解决方案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++”。他还说,“……找名字……”但仅限于此吗?我回答了标题问题。
      猜你喜欢
      • 2011-09-06
      • 2023-03-16
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多