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 倍
  • 符合性:100% 符合 Test262,99%+ 兼容 Babel/TypeScript
  • 内存效率:基于 Arena 的分配,最小化堆使用
  • 错误质量:带有恢复功能的有帮助的错误消息

开发工作流

设置环境

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 拥有称为 Test262 的 ECMAScript 测试套件。 Test262 的目标是提供涵盖规范中指定的每种可观察行为的测试材料。

解析器符合性使用 解析阶段测试

当前状态: 43765/43765 (100.00%)

Babel 解析器测试

当新的语言特性被添加到 JavaScript 时,Babel 会首先实现它们。 Babel 拥有针对前沿特性的全面 解析器测试

当前状态: 2093/2101 (99.62%)

TypeScript 符合性

TypeScript 符合性测试可以在 这里 找到。

当前状态: 6470/6479 (99.86%)

查看结果

测试结果存储在快照文件中以跟踪更改: