使用Python从代码库中挑选符号

时间:2010-10-13 00:00:35

标签: python parsing

给定代码库(比如说大型C或Objective-C项目)我想分析源代码文件并挑选出感兴趣的符号。它们可能是类声明,变量名称或类型或方法名称。是否有一个Python模块可以帮助我解决这个问题?

我可以看到前进的唯一方法是使用正则表达式来收集这些符号,但我认为这可能会很快变得非常难看。我也不是编译器或解析器方面的专家,因此可以选择更轻量级的东西。

感谢您的任何建议。

------更新-----

感谢到目前为止的所有建议,肯定是一些有希望的线索。另一种可能的途径:如果我能够编译我试图分析的项目该怎么办?调试符号(dsym)会使这个过程更容易吗?我不是在寻找任何先进的东西,只是一个类的列表,以及它们的ivar和方法名称。在这一点上,查看建议的解析工具似乎比我现在可以投资这个项目更多的工作

3 个答案:

答案 0 :(得分:5)

正则表达式绝对不是检查编程语言代码的好方法。我建议从下面提供的链接中选择一个解析模块。 你可以使用一些工具。它们都提供解析功能。你可以随时建立自己的东西:

pygccxml从c ++程序文件生成xml描述。这可能更接近你想要做的事情:

另外看一下,它会生成代表类结构的可导航类树。

答案 1 :(得分:1)

正则表达式不是这里的方法。语言已经有了定义的语法,所以请使用它。

答案 2 :(得分:1)

我们的Search Engine有一个使用langauge结构选择所有标识符的工具(此时它专门处理C,但不是Objective C)。搜索引擎提供了一个交互式查询语言,用于搜索各种语言结构,显示匹配以及显示匹配匹配的源文本。我们即将发布一个找到 definitions 使用的版本,它会直接选择函数/类型/变量声明。这将被视为“轻量级”。

相关的是搜索引擎的大哥,DMS Software Reengineeering Toolkit。 DMS及其C Front End提供了完全解析C代码和查找任意符号定义的能力。这将被视为“重任务”,因为它具有完整的预处理器并且绝对正确地获取定义信息,并且提供对与符号名称(声明,函数,typedef,...)相关联的AST的完全访问。

这些不是Python模块,但确实提供了对可能感兴趣的信息的精确访问。