开源静态分析工具,用接近源码的模式查找代码缺陷并执行编码规范,支持 30 多种语言。
eliben/pycparser
用纯 Python 编写的完整 C 语言解析器,将 C 源码解析为抽象语法树,无外部依赖。
- Star
- 3,577
- Fork
- 657
- 未关闭 Issue
- 19
- 最近提交
- 17小时前
这是什么?
pycparser 用于解析 C 语言源码,并生成可供 Python 程序遍历和修改的抽象语法树(AST)。语法遵循 C99 标准附录 A,目标覆盖 C11,并可通过方言设置支持 C23。它完全由纯 Python 实现,除解释器外没有其他依赖,可直接用 pip 安装。
C 代码通常需要先经过预处理,pycparser 可以通过 parse_file 函数调用 cpp、gcc -E 或 clang -E 等外部预处理器,也可以直接传入已预处理的代码。项目还在 utils/fake_libc_include 中提供了精简的标准库头文件,便于加快包含系统头文件的源码解析速度。
该项目常作为组件被其他工具使用,最典型的是 cffi 库,它借助 pycparser 读取 C 函数和类型声明。
核心功能
- 01支持解析 C99 和 C11 源码,并可通过方言选项启用 C23。
- 02使用纯 Python 编写,没有外部依赖。
- 03生成抽象语法树,节点类型在 _c_ast.cfg 中有完整定义。
- 04可配合 cpp、gcc -E 或 clang -E 等外部预处理器使用。
- 05提供精简的标准库伪头文件,便于加快含系统头文件代码的解析。
适用场景
- 为 C 代码开发静态检查工具或 linter。
- 对 C 代码做源到源的转换或混淆。
- 通过改写语法树为 C 语言添加自定义扩展。
- 像 cffi 一样解析 C 头文件声明,用于生成 FFI 绑定。
快速上手
- 1
使用 pip 安装 pycparser
pip install pycparser - 2
查看 examples 目录中的使用示例
使用前须知
- 大多数实际的 C 代码在解析前需要外部 C 预处理器(cpp、gcc -E 或 clang -E)。
- README 未说明 pip 包中包含哪些标准头文件;伪造的 libc 头文件并不包含在 pip 包中。
标签
常见问题
- pycparser 是什么?
- 用纯 Python 编写的完整 C 语言解析器,将 C 源码解析为抽象语法树,无外部依赖。 pycparser 用于解析 C 语言源码,并生成可供 Python 程序遍历和修改的抽象语法树(AST)。语法遵循 C99 标准附录 A,目标覆盖 C11,并可通过方言设置支持 C23。它完全由纯 Python 实现,除解释器外没有其他依赖,可直接用 pip 安装。
- pycparser 可以免费使用吗?用的什么许可证?
- pycparser 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
- pycparser 还在维护吗?
- 活跃维护中。pycparser 最近一次提交是在 2026年10月19日。
- pycparser 适合用来做什么?
- 为 C 代码开发静态检查工具或 linter。 对 C 代码做源到源的转换或混淆。 通过改写语法树为 C 语言添加自定义扩展。 像 cffi 一样解析 C 头文件声明,用于生成 FFI 绑定。
- pycparser 怎么安装和运行?
- 使用 pip 安装 pycparser: pip install pycparser 查看 examples 目录中的使用示例
- 在哪里获取 pycparser?
- 源代码和安装说明在 GitHub 上:https://github.com/eliben/pycparser
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
1.7万1112CLGPL-2.1更新于 7小时前
一款用 Python 编写的 Linux 镜像写入与磁盘格式化工具,受 Windows 上的 Rufus 启发。
13330PythonMIT更新于 27天前
为现有软件自动生成面向 AI 智能体的命令行接口,并提供 CLI-Hub 注册表用于安装现成的 CLI。
5.5万4964PythonApache-2.0更新于 28天前
开源 Python SDK 与服务,用于识别并脱敏文本、图片和结构化数据中的个人敏感信息。
1.1万1357PythonMIT更新于 昨天
一个轻量的 C++ 库,通过声音在设备之间传输少量数据,可用于 Python、JavaScript 和单片机。
7906479C++MIT更新于 6个月前