postgresql-cst-parser
は、Pure Rust で開発された PostgreSQL 専用の Lossless Syntax Tree(CST)パーサーです。この文書では、パーサーの特徴、動機、使用方法、および実装の詳細について説明します。
- 自動生成された CST パーサー: PostgreSQL の文法から自動的に生成されるため、幅広い文法に対応。
- 部分的な制限: スキャナーの一部の実装が不完全であるため、全ての文法に対応しているわけではありません。
- Rust から利用でき、広範な文法をサポートする PostgreSQL の CST パーサーが不足している。
- pg_query.rsはとても素晴らしいライブラリだが、CST は構築できず WebAssembly(wasm)でビルドできない。
以下のコード例のようにして使用します。
let resolved_root = postgresql_cst_parser::parse("SELECT 1;");
dbg!(resolved_root);
さらに、このパーサーを実際に体験してみたい場合は、こちらでオンラインで直接試すことができます。実際のコードを入力し、パーサーがどのように動作するかを確認してみましょう。
実装には、PostgreSQL の scan.l と gram.y に対する libpg_query の patchを適用したものを使用しています。scan.l
は Rust 用に書き換えられ、scan.l
と gram.y
を基にして構文解析表を作成し、パーサーを構築しています。
kwlist.h
, scan.l
, gram.y
は PostgreSQL License です。
その他のファイルは MIT License の下で公開されています。