Parser
Oxc parser는 사용 가능한 파서 중 가장 빠르고 ECMAScript 및 TypeScript 명세에 가장 잘 맞는 동작을 목표로 설계되었습니다. parser에 기여하려면 구현 세부와 광범위한 테스트 인프라를 함께 이해해야 합니다.
아키텍처 개요
parser는 전통적인 컴파일러 프런트엔드 구조를 따릅니다.
Source Text → Lexer → Tokens → Parser → AST주요 구성 요소
- Lexer: 소스 텍스트를 구조화된 토큰으로 토큰화
- Parser: AST를 구축하는 재귀 하강 파서
- AST: 메모리 효율적인 추상 구문 트리
- Error Recovery: 고급 오류 처리 및 복구
- Semantic Analysis: 심볼 해석과 스코프 관리
설계 목표
프로덕션에 바로 쓸 수 있는 Rust 기반 파서 중 가장 빠른 위치를 목표로 하며, 다음을 추구합니다.
- 속도: SWC보다 3배 이상 빠름, Biome보다 5배 이상 빠름
- 적합성(Test262): Test262 100% 준수, Babel/TypeScript 호환 99% 이상
- 메모리 효율: arena 기반 할당, 최소 힙 사용
- 오류 품질: 복구가 가능한 친절한 오류 메시지
개발 워크플로
환경 준비
bash
# parser 단위 테스트 실행
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 파일
parser/mod.rs: 파서 진입점parser/statement.rs: 문(statement) 파싱parser/expression.rs: 식(expression) 파싱parser/typescript.rs: TypeScript 전용 파싱parser/jsx.rs: JSX 파싱 로직
적합성 테스트
실행 방법
bash
just ctasks/coverage의 러너로 적합성 테스트 스위트를 실행합니다.
Test262 - ECMAScript 적합성
JavaScript에는 ECMAScript 테스트 스위트인 Test262가 있습니다. Test262는 명세에 기술된 모든 관찰 가능한 동작을 다루는 테스트 자료를 제공하는 것이 목표입니다.
Parser 적합성에는 parse 단계 테스트를 사용합니다.
현재 상태: 43765/43765 (100.00%)
Babel Parser 테스트
새 언어 기능이 JavaScript에 추가될 때 보통 Babel이 가장 먼저 구현합니다. Babel은 최신 기능에 대한 포괄적인 parser 테스트를 갖고 있습니다.
현재 상태: 2093/2101 (99.62%)
TypeScript 적합성
TypeScript 적합성 테스트는 여기에서 찾을 수 있습니다.
현재 상태: 6470/6479 (99.86%)
결과 확인
변경 사항을 추적하기 위해 테스트 결과는 스냅숏 파일에 저장됩니다.