Skip to content

Parser

Oxc 的解析器旨在成为目前最快且最符合标准的 JavaScript 与 TypeScript 解析器。参与解析器的开发需要理解其实现细节以及庞大的测试基础设施。

架构概览

该解析器遵循传统的编译器前端架构:

源代码文本 → 词法分析器 → 标记 → 解析器 → 抽象语法树(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%)

查看测试结果

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