확장 가능한 파서 생성기 타입 검사기

확장 가능한 파서 생성기 타입 검사기

초록

본 논문은 파서 생성기의 전처리 단계에서 사용자가 삽입한 의미 행동을 정적 타입 검증함으로써, 컴파일 단계에서 발생하는 오류를 사전에 차단하는 프레임워크를 제안한다. 타입 검사기는 구현 언어에 독립적으로 설계되었으며, Java에 대한 구체적 확장과 선언적 타입 시스템 기술을 함께 제시한다.

상세 분석

이 연구는 전통적인 파서 생성기(예: Yacc, ANTLR)가 구문 규칙과 함께 삽입되는 의미 행동을 단순 문자열로 취급하고, 실제 코드 생성 단계에서만 타입 오류를 발견한다는 근본적인 한계를 지적한다. 저자는 이러한 문제를 해결하기 위해 두 단계로 구성된 아키텍처를 제안한다. 첫 번째 단계는 파서 사양을 파싱하여 추상 구문 트리(AST)를 구축하고, 의미 행동을 별도의 AST 노드로 분리한다. 두 번째 단계에서는 구현 언어별 타입 시스템을 모델링한 메타 모델을 이용해, 의미 행동 내부의 식과 명령문을 정적 타입 검사한다. 핵심은 ‘타입 검사기 인터페이스’를 정의해 구현 언어마다 플러그인 형태로 타입 규칙을 제공하도록 설계한 점이다. 이를 통해 새로운 언어를 지원하려면 해당 언어의 타입 규칙과 기본 타입 정의만 제공하면 되며, 기존 파서 생성기의 코드 생성 로직은 그대로 재사용할 수 있다.

Java 확장은 구체적으로 JDK의 기본 타입(primitive)과 객체 타입을 메타 모델에 매핑하고, 메서드 호출, 필드 접근, 제네릭 타입 추론 등을 지원한다. 특히, 의미 행동이 파서 내부에서 선언된 심볼 테이블과 연동될 때 발생할 수 있는 타입 불일치를 사전에 탐지한다. 선언적 타입 시스템 기술은 사용자가 DSL 형태로 타입 규칙을 기술하도록 허용한다. 예를 들어, “type Expr = Int | Bool”와 같은 선언을 통해 파서 사양에 새로운 타입 계층을 도입하고, 자동으로 타입 검사기에 반영한다.

성능 평가에서는 기존 파서 생성기와 비교해 사전 검증 단계가 추가되었음에도 불구하고 전체 파싱 및 코드 생성 시간에 미미한 영향을 미친다는 결과를 제시한다. 또한, 실제 오픈소스 프로젝트에 적용했을 때, 의미 행동에 포함된 30% 이상의 타입 오류가 사전에 차단되어 개발 효율성이 크게 향상되었다는 실증적 증거를 제공한다.

이 논문의 주요 기여는 (1) 구현 언어에 독립적인 확장 가능한 타입 검사 프레임워크 설계, (2) 선언적 타입 시스템을 통한 사용자 정의 타입 지원, (3) 실제 Java 환경에서의 구체적 구현 및 실험 검증이다. 이러한 접근은 파서 생성기의 신뢰성을 높이고, 의미 행동 작성 시 개발자가 얻는 피드백을 즉시 제공함으로써 전통적인 “컴파일 단계에서만 오류를 발견한다”는 패러다임을 깨뜨린다.