在 Python 中解析 .c/.cpp/.py 源文件以获取包含的函数列表
Posted
技术标签:
【中文标题】在 Python 中解析 .c/.cpp/.py 源文件以获取包含的函数列表【英文标题】:Parsing .c/.cpp/.py source files in Python to get a list of the functions contained 【发布时间】:2010-07-14 13:21:10 【问题描述】:我正在尝试学习解析器,用于 Python、C 和 C++ 源代码(我自己的,而不是学校项目)。这是我想做的总结: 1) 在 Python 中读取 .c/.cpp/.py 源文件 2) 获取源文件中所有函数的列表,以及它们在行号方面的定义范围。
为了说明我的问题,请考虑文件“helloWorld.cpp”中的以下代码(在 python 中阅读):
//start
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv)
string str = "Hello World";
cout << str << endl;
return 0;
//end
我想要得到的是一些东西: 功能列表: int main(int argc, char** argv) 开始:第 7 行 结束:第 12 行
关于如何实现这一点的任何想法(一些代码示例将不胜感激)?
【问题讨论】:
见【有没有可以解析C++的好Python库? ](***.com/questions/1444961/…) 和 [ Python - 解析 .py 文件,读取 AST,修改它,然后写回修改后的源代码 ](***.com/questions/768634/…)。 【参考方案1】:如果您真的有兴趣学习解析 C,您可能需要查看 pycparsing。它基于PLY 构建,因此您可以利用从中学到的知识来解析很多东西。
不过,解析 C++方式比解析 C 或 Python 更复杂,因此您可能想在开始深入研究 C++ 之前探索 Python 和 C。
【讨论】:
【参考方案2】:Pygments 可能是一个不错的起点。它是用 python 编写的通用代码荧光笔,包含您尝试解析的所有语言以及更多其他语言。 你可以在这里找到它: http://dev.pocoo.org/projects/pygments/wiki
【讨论】:
【参考方案3】:可以实现与 Clang 的 python 绑定,或者,您可以使用 Python 解析和分析来自 Clang 的 XML AST 转储。
【讨论】:
【参考方案4】:对于 C 和 尤其是 C++ - 如果您有一个实际项目,我建议您尽可能接近规范的解析器实现。 C++ 解析不适合轻松愉快的人(而且通常做得不对——即使是商业编译器)。出于这个原因,我过去使用过gcc-xml。它使用 gcc 来解析代码,然后将 gcc 的内部表示转换为代码的引用 XML 表示,这种表示更容易理解。它可能不会教您解析,但可以让您深入了解熟悉的 XML 数据模型中的语言语法。
对于 Python 代码,您可以使用 parser 和/或 ast 模块。但是,我自己从未亲自使用过它们。
【讨论】:
以上是关于在 Python 中解析 .c/.cpp/.py 源文件以获取包含的函数列表的主要内容,如果未能解决你的问题,请参考以下文章