컴파일러를 만들고 싶은가? 이 두 편의 논문만 읽으면 된다 (2008)
4 hours ago
2
- 대부분의 컴파일러 교재는 이론 중심으로 방대해, 초보자가 실제 작동하는 컴파일러를 구현하기 어렵다는 문제 제기
- 이를 극복할 실용적 자료로 Jack Crenshaw의 “Let’s Build a Compiler!” 시리즈가 소개되며, 단일 패스 구조의 간결한 Pascal 컴파일러를 다룸
- 이 튜토리얼은 구문 분석과 코드 생성의 결합, 최소한의 최적화, 그리고 C·Forth 버전을 통해 실험적 학습을 지원
- 두 번째 자료인 “A Nanopass Framework for Compiler Education” 논문은 수많은 단순 변환(pass) 으로 구성된 모듈형 컴파일러 구조를 제시
- 두 자료를 통해 실제 구현 경험을 쌓은 뒤에야, 필요하다면 전통적 교재(Dragon Book) 을 참고해 심화 학습을 진행할 수 있음
컴파일러 학습의 현실과 두 편의 핵심 논문
- 기존 컴파일러 서적은 지나치게 방대하고 난해해, 초보자가 실제 동작하는 컴파일러를 작성하기 어렵다는 지적
- 대부분의 책이 정규식 변환, 문법 이론 등 방대한 주제를 다루며 실용적 출발점을 제공하지 않음
- 이로 인해 “컴파일러는 어렵다”는 오해와 신화가 형성됨
- 이러한 인식을 깨는 대표 자료로 Jack Crenshaw의 “Let’s Build a Compiler!” 시리즈가 소개됨
- 1988년에 시작된 이 튜토리얼은 Turbo Pascal 수준의 단일 패스 컴파일러를 다룸
- 구문 분석과 코드 생성을 결합한 구조로, 최소한의 최적화만 수행
- 원래 Pascal로 작성되었으며, 이후 C 버전과 Forth 번역판도 존재
- Forth 버전은 상호작용적 언어 특성 덕분에 실험과 이해가 용이함
- Crenshaw 시리즈의 한계는 프로그램의 내부 표현(추상 구문 트리, AST) 이 없다는 점
- Pascal에서는 트리 조작이 복잡해 생략되었으나, Python, Ruby, Erlang, Haskell, Lisp 같은 고수준 언어에서는 손쉽게 구현 가능
- 이러한 언어들은 본래 트리 구조 데이터 조작을 위해 설계됨
- 두 번째로 추천되는 자료는 Sarkar, Waddell, Dybvig의 논문
“A Nanopass Framework for Compiler Education”
- 핵심 개념은 “컴파일러는 프로그램의 내부 표현을 단계적으로 변환하는 일련의 과정”이라는 점
- 수십~수백 개의 단순한 변환(pass) 으로 구성된 구조를 제안
- 각 변환은 가능한 한 단순하게 유지하고, 변환 간 결합을 피함
- 프레임워크는 각 패스의 입력과 출력을 명시적으로 정의
- 구현 언어는 Scheme이며, 동적 타입 기반으로 런타임 검증 수행
- 이 두 자료를 통해 실제 컴파일러를 작성한 후, 필요하다면 Dragon Book 같은 전통적 교재로 심화 학습을 이어갈 수 있음
- 그러나 이 두 자료만으로도 충분히 실용적 컴파일러 제작 경험을 얻을 수 있음
-
Homepage
-
개발자
- 컴파일러를 만들고 싶은가? 이 두 편의 논문만 읽으면 된다 (2008)