mcpField
C
cs-compilers

cs-compilers

github.com/alphaonedev開発50 回インストール
リポジトリ

cs-compilers について

cs-compilersは、コンパイラー開発とソースコード解析向けのOpenClawスキルです。解析からコード生成、最適化まで扱い、Tree-sitterによるリアルタイム解析にも対応します。

主な機能

  1. 01入力のトークン化
  2. 02LL、LR、PEGパーサーの構築
  3. 03ASTの構築と走査
  4. 04型とスコープの分析
  5. 05LLVM IRの生成と最適化
  6. 06Tree-sitter解析の統合

活用シーン

  1. 01パーサーのデバッグ
  2. 02ソースコード構造の調査
  3. 03コードのトランスパイルや変換
  4. 04最適化された機械語の生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill cs-compilers

インストール後、Claude Code で/cs-compilersを入力して読み込まれたか確認します。

詳細

cs-compilers

目的

このスキルを使うと、字句解析、構文解析(LL/LR/PEG)、AST の構築、意味解析、LLVM によるコード生成、最適化、リアルタイム構文解析のための Tree-sitter との統合など、コンパイラー関連のタスクに AI が対応できるようになります。

使用する場面

コンパイラーの開発、ソースコードの分析、パーサーのデバッグ、最適化されたマシンコードの生成、IDE などのツールへの構文解析機能の統合を行う際に、このスキルを使用します。プログラミング言語のトランスパイルや静的解析など、コード変換を伴うタスクにも適用できます。

主な機能

  • 字句解析:正規表現を使って入力をトークン化します。たとえば、レキサーでキーワードに r'\b(int|float)\b' のようなパターンを定義します。
  • 構文解析:再帰下降パーサーで LL(1) を実装するか、yacc などのツールで LR(1) を実装します。packrat などのライブラリで PEG を使用できます。効率的な構文解析には Tree-sitter を統合できます。たとえば、tree_sitter.Language.build('path/to/tree-sitter-javascript.wasm') で言語文法を読み込みます。
  • AST の処理:AST を構築、操作します。分析のためにノードを走査できます。たとえば、Tree-sitter のカーソルを使用します:cursor = tree.walk(); while cursor.goto_first_child(): process_node(cursor)。
  • 意味解析:型チェックとスコープ解決を行います。たとえば、シンボルテーブルを使って変数の宣言と使用箇所を照合します。
  • コード生成:LLVM IR を生成します。LLVM C++ API でモジュールを作成できます。たとえば、LLVMModuleCreateWithName("MyModule") を呼び出し、その後に関数を追加します。
  • 最適化:定数伝播やデッドコード削除などのパスを適用します。たとえば、-O3 などのフラグを指定して LLVM の opt ツールを実行し、積極的な最適化を行います。
  • Tree-sitter との統合:コードをリアルタイムで構文解析します。ビルド済み文法を通じて、C や Python などの言語をサポートします。

使用パターン

直接コマンドを実行する場合は OpenClaw CLI、プログラムからアクセスする場合は SDK を通じてこのスキルを呼び出します。アクションとパラメーターは、必ず JSON で指定してください。CLI では、次のように実行します:openclaw invoke cs-compilers --action <action> --params '<JSON string>'。コードでは、SDK をインポートして次のように呼び出します:from openclaw import Client; client = Client(api_key=os.environ['OPENCLAW_API_KEY']); response = client.invoke('cs-compilers', {'action': 'parse', 'params': {'language': 'c', 'code': 'int main(){}'}})。params は、"language" や "code" などのキーを持つ辞書として構成します。外部ツールを使用する場合は、依存関係(LLVM など)がインストールされ、正しくパスが設定されていることを確認してください。

一般的なコマンド/API

  • コードを構文解析する:CLI:openclaw invoke cs-compilers --action parse --params '{"language": "python", "code": "def foo(x): return x+1"}'。AST が JSON として返されます。API:POST /api/skills/cs-compilers with body { "action": "parse", "params": { "language": "python", "code": "def foo(x): return x+1" } }。
  • LLVM IR を生成する:CLI:openclaw invoke cs-compilers --action generate-llvm --params '{"language": "c", "code": "int add(int a, int b) { return a+b; }", "optimize": true}'。最適化パスには --optimize などのフラグを使用します。API:POST /api/skills/cs-compilers with body { "action": "generate-llvm", "params": { "language": "c", "code": "int add(int a, int b) { return a+b; }" } }。
  • 入力を字句解析する:CLI:openclaw invoke cs-compilers --action lex --params '{"input": "int x = 5;", "patterns": ["\\bint\\b"]}'。トークンの配列が出力されます。API:POST /api/skills/cs-compilers with body { "action": "lex", "params": { "input": "int x = 5;", "patterns": ["\bint\b"] } }。
  • 設定形式:params には JSON を使用します。例:{ "grammar": "path/to/grammar.json", "options": { "debug": true } }。認証:すべての API 呼び出しで、環境変数 $OPENCLAW_API_KEY を設定してください。

統合に関する注意事項

pip install openclaw で OpenClaw SDK をインストールし、プロジェクトにインポートして統合します。LLVM を使用する場合は、clang がインストールされていることを確認し、llvm-config --cxxflags を使ってリンクしてください。Tree-sitter を使用するには、文法をコンパイルする必要があります。たとえば、リポジトリをクローンして make でビルドします。環境内で依存関係を管理してください。たとえば、LLVM ツールの PATH を設定します。カスタムパーサーの場合は、{ "parserType": "LR", "grammarRules": [{ "rule": "E -> T + E" }] } のような設定 JSON を指定してください。サンドボックスで統合をテストし、応答を検証してください。

エラー処理

応答オブジェクトに必ず 'error' キーがあるか確認してください。存在する場合は、エラーコードとメッセージが含まれています。CLI では、出力 JSON を解析し、response['error'] が存在する場合は、response['error']['code'] を終了コードとして終了します。SDK では、try: response = client.invoke(...); except OpenClawError as e: log(e.code, e.message) のように処理します。よくあるエラーは、無効なパラメーター(不正な形式の JSON など)を示す 400、認証の問題($OPENCLAW_API_KEY を確認してください)を示す 401、パーサーのクラッシュなど内部エラーを示す 500 です。一時的なエラー(503 など)は指数バックオフで再試行し、呼び出し前に入力を検証してください。たとえば、'language' が 'c' や 'python' など、サポートされている文字列であることを確認します。

具体的な使用例

  1. C 関数の解析:単純な C 関数を解析して AST を抽出するには、openclaw invoke cs-compilers --action parse --params '{"language": "c", "code": "int main() { return 0; }"}' を実行します。{ "type": "function_definition", "name": "main", "body": [...] } のような JSON AST が返されます。この AST を使って構造を分析します。たとえば、ノード数を数えます。
  2. 最適化された LLVM IR の生成:C コードから LLVM IR を生成して最適化するには、openclaw invoke cs-compilers --action generate-llvm --params '{"language": "c", "code": "int add(int a, int b) { return a + b; }", "optimize": true}' を実行します。出力例は次のとおりです:"define i32 @add(i32 %a, i32 %b) { %1 = add i32 %a, %b; ret i32 %1 }"。これを LLVM ツールにパイプして、さらにコンパイルします。

グラフ上の関係

  • 関連:programming-languages(言語設計における解析手法と AST 技法を共有します)
  • 関連:software-engineering(コード最適化やビルドツールとの統合を通じて関連します)
  • 関連:algorithms(LL や LR などの効率的な解析アルゴリズムと重なります)

コメント