- GitHub
- 用途
- パーサを生成する用
- インクリメンタルパースする用(テキストエディタで1文字挿入ごとに高速にパース)
- CSTを得る用(ASTではない)
- パーサ
- 生成されるパーサはC言語ソース固定
- parser.c
- ネイティブRustで使うときは、それをFFIして使う
- ブラウザで使うときは、web-tree-sitterを使う
- (parser.cをRust FFIしたものをWASMすることはできない)
- 使い分け
- Peggy
- JavaScript だけで使うとき用
- シンプルに PEG を読み書きしたいとき用
- 安定した実装がほしいとき用
- pest
- Rustネイティブとブラウザ(WASM)の両方で利用したいとき用
- シンプルに PEG を読み書きしたいとき用
- ※筆者はまだ使っていないので注意
- Tree-sitter
- テキストエディタで1文字入力するごとに高速インクリメンタルパースするとき用
- 筆者の利用実績
- デメリット
- Rustネイティブとブラウザ(WASM)の両方で利用するときに、
- 開発コストがかなり大きい
- 生成された perser.c をWASMにできない
- coding agentがハルシネーションしやすい
- 原因
- 上記アーキテクチャをcoding agentが学習不足
- 事例
- agentは、上記アーキテクチャをすべて捨てて自前のmanual parserを実装する、という事例が複数ある
- 対策
- ※開発コストが高い
- テンプレート
- Tree-sitter Rust WASM アーキテクチャの、ごく小規模なリポジトリを作る
- テンプレート的なリポジトリ
- そこでagentに実装させる
- agentに指示する:
- テンプレート的リポジトリを参照して実装せよ
- ※狙い
- agentにcontextを提示することで、ハルシネーションのリスクを下げる
- AGENTS.md 等で強く縛る
- 強く縛る例
- ※あくまで例なので、もし使うなら検証と適切な変更はマスト
- WASM生成にはweb-tree-sitterを利用せよ
- アーキテクチャをTree-sitterで固定せよ。代替アーキテクチャを実装するな
- もしTree-sitter以外の解決法を生成した場合、出力を中止し、失敗を報告せよ