Skip to content

パーサー

Oxc のパーサーは、最速かつ仕様への適合度が高い JavaScript / TypeScript パーサーを目指して設計されています。コントリビュートするには、実装の細部と、規模の大きいテスト基盤の両方を押さえる必要があります。

アーキテクチャの概要

パーサーは古典的なコンパイラフロントエンドの流れに沿います。

Source Text → Lexer → Tokens → Parser → AST

主な構成要素

  • Lexer: ソーステキストを構造化トークンに分割する
  • Parser: 再帰下降で AST を組み立てる
  • AST: メモリ効率のよい抽象構文木
  • Error Recovery: 高度なエラー処理とリカバリ
  • Semantic Analysis: シンボル解決とスコープ管理

設計目標

本番投入可能な Rust 製パーサーのなかで最速を狙いつつ、次を満たします。

  • 速度: SWC の約 3 倍、Biome の約 5 倍を目安にする
  • 適合性: Test262 は 100%、Babel / TypeScript との互換は 99% 超
  • メモリ: アリーナ割り当てでヒープを抑える
  • エラー品質: リカバリを含め、実務で役立つメッセージにする

開発フロー

準備

bash
# パーサーのユニットテスト
cargo test -p oxc_parser

# 適合テスト
just c  # または `just coverage`

プロジェクト構成

crates/oxc_parser/
├── src/
│   ├── lib.rs              # 公開 API
│   ├── lexer/              # トークン化
│   ├── parser/             # パースの本処理
│   ├── cursor.rs           # トークンストリーム管理
│   └── diagnostics.rs      # エラー処理
├── tests/                  # ユニットテスト
└── examples/               # 利用例

コアとなるパーサーファイル

  • parser/mod.rs: パーサーの入口
  • parser/statement.rs: 文のパース
  • parser/expression.rs: 式のパース
  • parser/typescript.rs: TypeScript 固有のパース
  • parser/jsx.rs: JSX のパース

適合テスト

適合テストの実行

bash
just c

tasks/coverage にあるランナーで、各種スイートを走らせます。

Test262(ECMAScript)

JavaScript 向けの ECMAScript Test Suite(Test262)があります。Test262 は仕様で規定される観測可能な挙動をできるだけ網羅するためのテスト材料を提供することを目的にしています。

パーサー適合では parse フェーズのテストを使います。

現状: 43765/43765 (100.00%)

Babel パーサーのテスト

新しい言語機能は多くの場合 Babel が先行実装し、パーサー向けテストも充実しています。

現状: 2093/2101 (99.62%)

TypeScript 適合

TypeScript の適合テストは こちら にあります。

現状: 6470/6479 (99.86%)

結果の見方

スナップショットで結果を追跡します。