正規表現やASTではなくコードに似たパターンでバグの発見やコーディング規約の徹底を支援する、高速なオープンソース静的解析CLI。
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
pipでpycparserをインストールする
pip install pycparser - 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 の数値は毎日更新されます。
関連プロジェクト
WindowsのRufusに着想を得た、LinuxでISOイメージから起動可能なUSBドライブを作成するベータ版Pythonユーティリティ。
既存ソフトウェア向けのエージェント対応CLIを生成し、完成済みCLIを導入できるCLI-Hubも備えたツールキット。
テキスト、画像、構造化データ内のPIIを検出・匿名化する、オープンソースのPython SDKとサービス。
音声でデバイス間に少量のデータを送れる、Python、JavaScript、マイコンから利用可能な小型C++ライブラリ。