LXG 컴파일러 설계와 구현

본 논문은 파스칼 계열의 간단한 함수형 언어인 LXG의 컴파일러를 설계·구현하고, 주요 컴파일 단계와 구현상의 핵심 기술을 상세히 기술한다. 어휘·구문 분석, 의미 분석, 중간 코드 생성 및 최적화 과정을 설명하고, 테스트 프로그램을 통해 성능 및 정확성을 검증한다.

LXG 컴파일러 설계와 구현

초록

본 논문은 파스칼 계열의 간단한 함수형 언어인 LXG의 컴파일러를 설계·구현하고, 주요 컴파일 단계와 구현상의 핵심 기술을 상세히 기술한다. 어휘·구문 분석, 의미 분석, 중간 코드 생성 및 최적화 과정을 설명하고, 테스트 프로그램을 통해 성능 및 정확성을 검증한다.

상세 요약

LXG는 Pascal과 유사한 문법을 가지면서 함수형 프로그래밍 요소를 도입한 교육용 언어로, 절차와 변수 선언을 지원하지만 클래스와 같은 객체지향 기능은 배제하였다. 이러한 설계 선택은 컴파일러 구현의 복잡성을 낮추고, 핵심 컴파일 이론을 학습하는 데 초점을 맞추게 한다. 논문은 먼저 LXG의 문법을 BNF 형태로 제시하고, 토큰 집합을 정의한다. 어휘 분석기는 DFA 기반의 전처리기로 구현되어, 키워드, 식별자, 리터럴, 연산자를 효율적으로 구분한다. 구문 분석 단계에서는 LL(1) 파서를 선택했으며, FIRST/FOLLOW 집합을 계산해 파싱 테이블을 구축한다. 이는 재귀적 하향 파싱을 가능하게 하여 구현이 직관적이며 디버깅이 용이하다. 의미 분석에서는 심볼 테이블을 스코프별로 계층화하고, 타입 검사를 수행한다. 특히 함수 호출 시 인자와 매개변수의 일치 여부, 변수 선언 전 사용 여부 등을 정적 검증한다. 중간 코드 생성은 3주소 코드 형태를 채택했으며, 각 구문에 대응하는 코드 템플릿을 정의한다. 이 단계에서 제어 흐름 그래프(CFG)를 구성하고, 기본 블록 단위의 최적화를 적용한다. 최적화 기법으로는 상수 전파, 죽은 코드 제거, 공통 부분 표현(CSE) 등을 포함한다. 마지막으로 목표 기계어 혹은 가상 머신 바이트코드로 변환하는 백엔드가 구현되었으며, 레지스터 할당은 간단한 그래프 색칠 알고리즘을 사용한다. 테스트는 표준적인 알고리즘(피보나치, 정렬, 그래프 탐색)과 언어 자체의 특수 기능(재귀, 고차 함수)으로 구성했으며, 컴파일 시간, 실행 시간, 메모리 사용량을 측정했다. 결과는 교육용 수준에서 충분히 실용적이며, 기존 교육용 컴파일러와 비교해 성능 격차가 크지 않음을 보여준다. 논문은 또한 구현 과정에서 마주한 난관, 예를 들어 왼쪽 재귀 제거와 오류 복구 메커니즘 설계 등을 상세히 논의한다. 전반적으로 LXG 컴파일러는 언어 설계와 컴파일러 구현 교육에 적합한 사례로, 모듈화된 구조와 명확한 인터페이스를 통해 확장성을 확보한다.


📜 논문 원문 (영문)

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