언어 기술을 위한 문법 측면 프로그래밍

문법에 부가적인 주석을 별도의 측면(aspect)으로 분리함으로써 가독성을 높이고, 동일 언어에 대한 여러 도구용 정의를 중복 없이 관리할 수 있는 방법을 제시한다.

언어 기술을 위한 문법 측면 프로그래밍

초록

문법에 부가적인 주석을 별도의 측면(aspect)으로 분리함으로써 가독성을 높이고, 동일 언어에 대한 여러 도구용 정의를 중복 없이 관리할 수 있는 방법을 제시한다.

상세 요약

이 논문은 전통적인 컨텍스트 자유 문법(CFG)에 의미 행동, 출력 형식 등 다양한 주석을 직접 삽입하는 방식이 갖는 가독성 저하와 유지보수 비용 문제를 지적한다. 특히 동일한 언어를 파서, 프린터, 편집기 등 여러 도구에 적용하려면 각각의 주석을 별도로 작성해야 하는 비효율성이 발생한다. 이를 해결하기 위해 저자는 AOP(Aspect‑Oriented Programming) 개념을 차용하여 ‘문법 측면’이라는 메커니즘을 도입한다. 기본 문법 파일은 순수한 CFG만을 포함하고, 별도의 측면 파일에 주석(예: 트리 변환, 색상 지정, 포맷 규칙 등)을 정의한다. 측면은 포인트컷(대상 문법 규칙)과 어드바이스(주석 내용)로 구성되며, 툴 체인에서 이 둘을 결합해 최종 코드(파서, 프린터, 하이라이터 등)를 자동 생성한다. 핵심 아이디어는 ‘관심사의 분리’를 문법 정의 단계에 적용함으로써, 문법 자체는 변하지 않으면서 다양한 부가 기능을 플러그인 형태로 조합할 수 있다는 점이다. 구현체인 Grammatic은 DSL 기반의 측면 정의 언어를 제공하고, ANTLR, JavaCC 등 기존 파서 생성기와 연동한다. 실험에서는 동일 언어에 대해 파서와 프린터, 구문 강조기를 각각 별도 주석 없이 하나의 문법과 여러 측면만으로 생성함으로써 코드 라인 수와 유지보수 비용이 현저히 감소함을 보였다. 또한 측면 간 충돌 해결을 위한 우선순위 규칙과, 측면 재사용을 위한 상속 메커니즘도 제시한다. 이러한 접근은 대규모 언어 정의 프로젝트에서 모듈화와 협업 효율성을 크게 향상시킬 수 있다.


📜 논문 원문 (영문)

🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...