Skip to content

パーサー

Oxc パーサーは、最も高速かつ準拠度の高い JavaScript および TypeScript パーサーとして設計されています。パーサーへの貢献には、実装の詳細と広範なテストインフラストラクチャの理解が求められます。

アーキテクチャ概要

パーサーは伝統的なコンパイラフロントエンドのアーキテクチャに従っています:

ソーステキスト → レキサ → トークン → パーサー → AST

主要コンポーネント

  • レキサ:ソーステキストを構造化されたトークンに分割
  • パーサー:再帰的下降型パーサーで、AST を構築
  • AST:メモリ効率の良い抽象構文木
  • エラー回復:高度なエラー処理と回復機能
  • 意味解析:シンボル解決とスコープ管理

設計目標

以下の点を備えた、最も高速な Rust による本番環境向けパーサーを目指しています:

  • 速度:SWC の 3 倍、Biome の 5 倍以上に高速
  • 準拠度:100% Test262 対応、Babel/TypeScript 互換性 99% 以上
  • メモリ効率:アレナベースの割り当て、最小限のヒープ使用量
  • エラー品質:役立つエラーメッセージと回復機能

開発ワークフロー

初期設定

bash
# パーサーのテストを実行
cargo test -p oxc_parser

# 準拠テストを実行
just c  # または `just coverage`

プロジェクト構造

crates/oxc_parser/
├── src/
│   ├── lib.rs              # 公開インターフェイス
│   ├── 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 テストセット として知られる Test262 があります。 Test262 の目的は、仕様に定義されたすべての観測可能な振る舞いをカバーするテスト素材を提供することです。

パーサーの準拠テストでは、解析フェーズのテスト を使用しています。

現在の状態: 43765/43765 (100.00%)

Babel パーサーのテスト

新しい言語機能が JavaScript に追加される際、まず Babel がその実装を行います。 Babel は最先端の機能に対応する包括的な パーサーのテスト を保有しています。

現在の状態: 2093/2101 (99.62%)

TypeScript 準拠

TypeScript 準拠テストは こちら にあります。

現在の状態: 6470/6479 (99.86%)

結果の表示

テスト結果は、変更の追跡のためにスナップショットファイルに保存されています: