피드로 돌아가기
Dev.toBackend
원문 읽기
Registry Pattern과 Tree-sitter로 14개 언어 파서를 단일 함수로 통합
How I Parse 14 Languages With One Function — Codewalk Deep Dives #1
AI 요약
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을 통해 런타임 오버헤드 감소