Repolode
eliben

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. 1

    使用 pip 安装 pycparser

    pip install pycparser
  2. 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 数据每日更新。

相关项目