컴파일러 엔지니어링

Engineering a Compiler (2nd Edition) — 재치있게 풀어쓴 한국어 해설판

원저: Keith D. Cooper · Linda Torczon (Rice University) · Morgan Kaufmann, 2012

이 사이트는 영어 원서를 한국어로 풀어 정리한 학습용 해설입니다. 1대1 직역이 아니라, 핵심 개념을 한국어 독자의 직관에 맞게 다시 짠 강의 노트에 가깝습니다. 챕터별로 들어가서 읽어보세요.

Part I — 프론트엔드
Chapter 1
컴파일 개관
컴파일러는 뭐고, 왜 만들고, 어떤 부품들로 굴러가는가. 큰 그림 한 장.
Chapter 2
스캐너 (어휘 분석)
소스 코드를 토큰으로 자르는 부품. 정규표현식, NFA, DFA, 그리고 Hopcroft 최소화.
Chapter 3
파서 (구문 분석)
토큰 흐름에서 문장 구조를 발견하기. 문맥 자유 문법, LL(1), LR(1)의 세계.
Chapter 4
문맥 의존 분석
타입 시스템, 속성 문법, 의미 분석. "이 문장 문법은 맞는데, 말이 되니?" 검사.
Part II — 미들엔드
Chapter 5
중간 표현 (IR)
트리, 그래프, 3-주소 코드, SSA 폼. 컴파일러가 머릿속에 그림 그리는 방식들.
Chapter 6
프로시저 추상화
함수 호출, 활성 레코드, 이름 공간, 객체 지향 런타임. 스택과 힙의 정치학.
Chapter 7
코드 모양 만들기
표현식, 배열, 문자열, 제어 흐름, 호출까지 — 소스 구조를 IR로 옮기는 디테일.
Part III — 최적화
Chapter 8
최적화 입문
왜 최적화를 하는가, 어디서 어떻게. 지역/지역간/전역/프로시저간 스코프 정리.
Chapter 9
데이터 흐름 분석
"이 변수 살아있나? 죽었나?" 반복 알고리즘과 SSA 구축, dominance frontier.
Chapter 10
스칼라 최적화
죽은 코드 제거, 코드 이동, 강도 감소, 특수화. 컴파일러가 하는 잔손질의 백과사전.
Part IV — 백엔드
Chapter 11
명령어 선택
트리 패턴 매칭, peephole 최적화. 추상 IR을 실제 ISA로 사상하는 작업.
Chapter 12
명령어 스케줄링
파이프라인 hazard 피하기. List 스케줄링, trace 스케줄링, software pipelining.
Chapter 13
레지스터 할당
유한한 레지스터, 무한한 변수. 그래프 색칠하기와 spill 비용의 미학.
부록
Appendix A
ILOC 의사 어셈블리
책 전체에서 쓰는 가짜 ISA. RISC 스타일의 깔끔한 학습용 명령어 집합.
Appendix B
자료 구조
집합 표현, IR 자료구조, 해시 테이블, 심볼 테이블 설계.