문법 기반 언어 방언 생성과 측면 기법 활용
본 논문은 기존 언어의 문법을 작은 변형 집합으로 기술하고, 이러한 변형을 ‘측면(Aspect)’ 형태로 정의하여 자동으로 새로운 언어 방언을 생성하는 방법을 제안한다. 문법에 메타데이터를 부착하고, 문법 구조 변화에 따라 파서, 의미 분석, 오류 복구 등 전체 프론트엔드가 일관되게 변형되도록 설계하였다. 특정 파싱 기술에 종속되지 않으며, 높은 모듈성과 재사용성을 제공한다.
저자: Andrey Breslav
본 논문은 텍스트 기반 프로그래밍 언어의 방언을 효율적으로 생성하고, 해당 방언에 필요한 컴파일러 프론트엔드, IDE 지원, pretty‑printer 등 다양한 도구 체인을 자동으로 구축하는 방법을 제시한다. 방언은 “부모 언어의 문법에 상대적으로 작은 변경 집합을 적용한 변형”으로 정의되며, 이러한 변경을 **syntactic aspects**라는 형태로 선언한다. 저자는 기존 AOP(Aspect‑Oriented Programming) 개념을 차용해, 문법 규칙 내 특정 위치를 패턴 매칭으로 찾아 삽입·삭제·대체와 같은 변형을 기술한다.
예시로, 실수형 토큰을 정수형 토큰으로 교체하고 변수 선언 규칙을 추가하는 과정을 보여준다. 여기서 `factor $production =|: REAL @REAL` 과 같은 구문은 기존 REAL 토큰을 INT 토큰으로 교체하고, 새로운 ID 토큰을 삽입하는 작업을 의미한다. 이러한 변형은 단순 문자열 치환이 아니라 문법 구조 자체를 재구성하는 것이며, 복잡한 실제 언어에서도 적용 가능하도록 설계되었다.
핵심 아이디어는 **문법 객체에 메타데이터(Aspect)를 부착**하는 것이다. 메타데이터는 이름‑값 쌍 형태이며, 값은 토큰, 규칙, 혹은 복합 데이터 타입을 포함한다. 메타데이터는 독립적인 정의 파일에 분산될 수 있어, 방언을 구성하는 여러 측면(예: 구문, 의미 분석, 오류 복구)을 각각 별도 모듈로 관리한다. 문법이 변형될 때 메타데이터도 자동으로 재배치되며, 이는 특별히 설계된 무결성 검사기에 의해 보장된다. 결과적으로 파서, AST 생성기, 시맨틱 체크러, 오류 복구 모듈 등 프론트엔드 전체가 문법 변화에 일관되게 따라가게 된다.
이 접근법은 **언어 설계와 파싱 기술에 독립적**이다. LR, LL, PEG 등 어떤 파싱 알고리즘을 사용하든 문법과 메타데이터만 정의하면 동일한 변형 로직을 적용할 수 있다. 또한, 기존 DSL 확장 프레임워크와 달리 전체 컴파일러를 재작성할 필요 없이 문법과 메타데이터만 수정하면 새로운 방언을 만들 수 있다. 저자는 이를 통해 방언 개발 비용을 크게 절감하고, 높은 재사용성을 확보한다.
논문은 또한 기존의 C와 Java 전용 확장 도구(예: XTC, Polyglot)와 비교하면서, 제안된 방법이 **범용성**과 **모듈성** 측면에서 우수함을 강조한다. 기존 도구들은 특정 언어에 맞춘 설계가 대부분이며, 새로운 언어에 적용하려면 많은 추가 작업이 필요하지만, 본 방법은 문법만 제공하면 자동으로 전체 툴 체인을 생성한다.
한계점으로는 복잡한 의미론적 변형(예: 타입 시스템 전체 교체)이나, 메타데이터와 문법 사이의 복잡한 의존 관계가 발생할 경우 무결성 검사와 재배치 비용이 증가할 수 있다는 점을 언급한다. 또한 현재 구현은 실험적 프로토타입 수준이며, 대규모 산업용 언어에 적용하기 위해서는 성능 최적화와 기존 IDE·빌드 시스템과의 통합 작업이 필요하다.
결론적으로, 이 논문은 **문법 중심의 측면 기법**을 통해 언어 방언 개발을 자동화하고, 메타데이터 기반의 고수준 모델링으로 프론트엔드 전체를 일관되게 변형시킬 수 있는 새로운 패러다임을 제시한다. 이는 DSL 설계, 언어 확장, 그리고 컴파일러 아키텍처 연구에 중요한 기여를 한다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기