Repolode
eliben

eliben/pycparser

外部依存なしの純粋なPythonで書かれたC99/C11パーサー。CソースからASTを生成します。

スター
3,577
フォーク
657
未解決の Issue
19
最終コミット
19 時間前

これは何?

pycparserはCソースコードを解析し、Pythonプログラムから走査・変更できる抽象構文木(AST)を構築します。C99規格の付属書Aにある文法に準拠し、C11にも対応することを目指しています。方言設定でC23も利用できます。純粋なPythonで実装され、インタープリター以外の依存関係がないため、pipで簡単にインストールできます。

Cコードは通常、事前にプリプロセスする必要があります。pycparserでは、parse_file関数経由でcpp、gcc -E、clang -Eなどの外部プリプロセッサを呼び出すか、プリプロセス済みのコードを渡せます。また、システムヘッダーを含むファイルの解析を高速化するため、utils/fake_libc_includeに最小限の偽標準ライブラリヘッダーも同梱しています。

このプロジェクトは他のツールのコンポーネントとして広く利用されており、特にcffiライブラリはCの関数宣言や型宣言の読み取りにpycparserを使用しています。

主な機能

  • 01C99とC11のソースを解析でき、方言オプションでC23も利用できます。
  • 02純粋なPythonで実装されており、外部依存はありません。
  • 03ノード型が_c_ast.cfgに記載されたASTを生成します。
  • 04cpp、gcc -E、clang -Eなどの外部プリプロセッサと連携できます。
  • 05標準ヘッダーを含むコードを高速に解析するための最小限の偽libcヘッダーを同梱しています。

ユースケース

  • Cコード向けの静的コードチェッカーやリンターの作成。
  • Cのソースからソースへの変換ツールや難読化ツールの作成。
  • ASTの書き換えによるC言語への独自拡張の追加。
  • cffiのように、Cヘッダーの宣言を解析してFFIバインディングを生成。

クイックスタート

  1. 1

    pipでpycparserをインストールする

    pip install pycparser
  2. 2

    examplesディレクトリで使用例を確認する

使う前に知っておきたいこと

  • 現実的なCコードのほとんどは、解析する前に外部のCプリプロセッサ(cpp、gcc -E、またはclang -E)が必要です。
  • READMEには、pipパッケージにどの標準ヘッダーが含まれているか記載されていません。fake libcヘッダーは含まれていません。

トピック

よくある質問

pycparser とは?
外部依存なしの純粋なPythonで書かれたC99/C11パーサー。CソースからASTを生成します。 pycparserはCソースコードを解析し、Pythonプログラムから走査・変更できる抽象構文木(AST)を構築します。C99規格の付属書Aにある文法に準拠し、C11にも対応することを目指しています。方言設定でC23も利用できます。純粋なPythonで実装され、インタープリター以外の依存関係がないため、pipで簡単にインストールできます。
pycparser は無料で使えますか?ライセンスは?
pycparser は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
pycparser は今もメンテナンスされていますか?
活発にメンテナンス中。pycparser の最終コミットは 2026年10月19日 です。
pycparser は何に使えますか?
Cコード向けの静的コードチェッカーやリンターの作成。 Cのソースからソースへの変換ツールや難読化ツールの作成。 ASTの書き換えによるC言語への独自拡張の追加。 cffiのように、Cヘッダーの宣言を解析してFFIバインディングを生成。
pycparser のインストール方法は?
pipでpycparserをインストールする: pip install pycparser examplesディレクトリで使用例を確認する
pycparser はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/eliben/pycparser

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト