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%)
查看测试结果
测试结果存储在快照文件中以追踪变更:
