피드로 돌아가기
How I Parse 14 Languages With One Function — Codewalk Deep Dives #1
Dev.toDev.to
Backend

Registry Pattern과 Tree-sitter로 14개 언어 파서를 단일 함수로 통합

How I Parse 14 Languages With One Function — Codewalk Deep Dives #1

Aakash Gupta2026년 5월 20일12intermediate

Context

다양한 프로그래밍 언어의 함수 및 클래스 구조를 추출하여 AST-aware chunking과 의존성 그래프를 구축해야 하는 요구사항 발생. 각 언어별 전용 파서를 개별 구현하는 방식은 중복 코드가 과다하며 유지보수 비용이 기하급수적으로 증가하는 한계 존재.

Technical Solution

  • Tree-sitter 기반의 단일 API를 채택하여 언어별 구문 분석 결과물을 표준화된 Concrete Syntax Tree로 수신
  • 언어별로 상이한 노드 명칭(예: function_definition vs function_item)을 매핑하는 NODE_TYPES Registry 설계로 로직과 데이터를 분리
  • C 언어의 중첩된 이름 구조나 Dart의 중복 시그니처 등 특정 언어의 특수성을 처리하는 3단계 Fallback Chain 패턴 구현
  • importlib를 활용한 Lazy Loading 구조를 통해 필요한 언어의 Grammar 패키지만 동적으로 로드하여 메모리 효율 최적화
  • skip_children_types 패턴을 도입하여 부모-자식 노드 간 타입 중복 시 발생하는 중복 데이터 생성 방지

1. 다국어/다양한 포맷 처리 시 개별 핸들러 대신 메타데이터 기반의 매핑 테이블 적용 검토

2. 복잡한 트라이-캐치나 if/else 분기 대신 독립적인 Fallback Chain 구조 설계

3. 외부 라이브러리 의존성이 많을 경우 Lazy Loading을 통해 런타임 오버헤드 감소

원문 읽기