컴파일러 작성법, 두 논문으로 쉽게 배우기
원제: Want to Write a Compiler? Just Read These Two Papers (2008)
왜 중요한가
복잡한 컴파일러 이론을 실용적 접근법으로 단순화해 개발자들의 언어 구현 능력 향상에 기여
2008년 프로그래밍 블로그에서 컴파일러 작성이 어렵다는 통념을 깨뜨리는 두 가지 핵심 자료를 소개했다. Jack Crenshaw의 'Let's Build a Compiler!' 시리즈와 Sarkar 등의 'A Nanopass Framework for Compiler Education' 논문이 실용적인 컴파일러 학습법을 제시한다.
기존 컴파일러 교육서들은 정규표현식을 실행 가능한 상태머신으로 변환하는 방법이나 다양한 문법 타입 등 광범위한 내용을 다루어 실제 컴파일러 작성에는 도움이 되지 않는다는 문제점이 지적됐다. 이에 대한 해결책으로 두 가지 자료가 추천됐다.
첫째는 Jack Crenshaw의 'Let's Build a Compiler!' 시리즈로, 1988년 시작된 이 튜토리얼은 복잡한 주제를 1년차 프로그래밍 수업 수준으로 단순화했다. Turbo Pascal 클래스의 컴파일러에 초점을 맞춰 단일 패스, 파싱과 코드 생성의 결합, 기본적인 최적화만을 적용하는 방식을 다룬다. 원래 Pascal로 구현됐지만 C 버전과 Marcel Hendrix의 Forth 번역본도 존재한다.
둘째는 Sarkar, Waddell, Dybvig의 'A Nanopass Framework for Compiler Education' 논문이다. 이 논문은 컴파일러를 프로그램 내부 표현의 일련의 변환 과정으로 보는 개념을 제시한다. 수십 개 또는 수백 개의 컴파일러 패스를 사용하되 각각을 가능한 한 단순하게 유지하고 변환을 결합하지 않고 분리하는 방식을 권장한다.