Skip to content

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 c

tasks/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%)

결과 확인

변경 사항을 추적하기 위해 테스트 결과는 스냅숏 파일에 저장됩니다.