# 컴파일러와 언어 설계 입문 교재 (2021)

> Clean Markdown view of GeekNews topic #31164. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31164](https://news.hada.io/topic?id=31164)
- GeekNews Markdown: [https://news.hada.io/topic/31164.md](https://news.hada.io/topic/31164.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-06T10:12:31+09:00
- Updated: 2026-07-06T10:12:31+09:00
- Original source: [dthain.github.io](https://dthain.github.io/books/compiler/)
- Points: 2
- Comments: 1

## Topic Body

- Notre Dame CSE 40243 컴파일러 수업에서 개발된 **무료 온라인 교재**로, 전체 PDF와 장별 PDF를 바로 내려받아 학습할 수 있음
- 한 학기 분량으로 **컴파일러 제작 흐름**을 따라가며, 고급 언어 프로그램을 저급 언어 프로그램으로 번역하는 과정을 다룸
- 학습자는 C와 유사한 언어를 입력받아 **X86 또는 ARM 어셈블리**로 변환하는 간단한 컴파일러 구현을 목표로 함
- C 프로그래밍 경험이 있고 자료구조와 컴퓨터 구조를 배운 **학부생 수준**에 가장 잘 맞음
- PDF는 개인·학술 용도로 사용할 수 있지만, **상업적 인쇄·배포는 금지**되며 최신 자료는 compilerbook.org에서 확인해야 함

---

### Notre Dame 컴파일러 수업 기반 교재
- **Introduction to Compilers and Language Design**는 Douglas Thain이 University of Notre Dame의 CSE 40243 컴파일러 수업을 위해 개발한 무료 온라인 교재임
- 2판은 2020년판이며, 수정일은 **2021년 1월 15일**로 표시됨
- 실물 책을 원하는 독자는 하드커버 또는 페이퍼백을 구매할 수 있음
- 교재는 컴파일러를 처음부터 만드는 과정을 통해 컴퓨터과학의 이론적·실용적 측면을 함께 다룸
- 최종 학습 목표는 C와 유사한 언어를 입력받아 **X86 또는 ARM 어셈블리**로 번역하는 단순 컴파일러를 구현하는 것임

### PDF, 예제 코드, 사용 조건
- 전체 교재 PDF와 장별 PDF가 제공됨
  - [Complete Book](https://dthain.github.io/books/compiler/compilerbook.pdf)
  - [Chapter 1: Introduction](https://dthain.github.io/books/compiler/chapter1.pdf)
  - [Chapter 3: Scanning](https://dthain.github.io/books/compiler/chapter3.pdf)
  - [Chapter 4: Parsing](https://dthain.github.io/books/compiler/chapter4.pdf)
  - [Chapter 6: The Abstract Syntax Tree](https://dthain.github.io/books/compiler/chapter6.pdf)
  - [Chapter 7: Semantic Analysis](https://dthain.github.io/books/compiler/chapter7.pdf)
  - [Chapter 8: Intermediate Representation](https://dthain.github.io/books/compiler/chapter8.pdf)
  - [Chapter 11: Code Generation](https://dthain.github.io/books/compiler/chapter11.pdf)
  - [Chapter 12: Optimization](https://dthain.github.io/books/compiler/chapter12.pdf)
- 부록에는 **Sample Course Project**, **The B-Minor Language**, **Coding Conventions**가 포함됨
- [compilerbook-examples](http://github.com/dthain/compilerbook-examples) GitHub 저장소에는 책과 대응되는 실습 자료가 있음
  - 여러 스캐너와 파서
  - 프로젝트 컴파일러용 시작 코드 구조
  - 스캐너, 파서, 타입체커, 코드 생성기 각 단계의 샘플 테스트 케이스
- PDF는 개인 및 학술 용도로 다운로드, 출력, 사용할 수 있음
- 상업적 인쇄나 배포는 금지되며, PDF를 로컬에 복사해 배포하기보다 학생들에게 **compilerbook.org** 페이지를 안내해야 함
- 오탈자나 오류는 제목을 `Compiler Book Errata`로 하여 `dthain@nd.edu`에 이메일로 보낼 수 있음

## Comments



### Comment 61312

- Author: neo
- Created: 2026-07-06T10:12:32+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48793454) 
- 대학에서 Dr. Thain의 **컴파일러 수업**을 들었는데 정말 최고였음  
  훌륭한 강사였고, 수업 프로젝트 덕분에 C 스타일 컴파일러를 단계별로 직접 만들 수 있었음. 여기 예제 프로젝트도 거의 그때 했던 프로젝트와 같아 보이며, 끝까지 따라 해보길 강력 추천함

- 아직 어떤 강의에서 다뤘는지는 모르겠지만, **C4**([https://news.ycombinator.com/item?id=8558822](<https://news.ycombinator.com/item?id=8558822>))와 **C4x86**([https://news.ycombinator.com/item?id=8746054](<https://news.ycombinator.com/item?id=8746054>))는 한 학기 분량의 학습 주제로 좋을 것 같음  
  아주 작은 자기 자신을 컴파일하는 C 부분집합 컴파일러라서, 기능을 확장하는 추가 과제의 기반으로도 적합해 보임

- 관련 글: Introduction to Compilers and Language Design (2021) - [https://news.ycombinator.com/item?id=31388741](<https://news.ycombinator.com/item?id=31388741>) - 2022년 5월, 댓글 68개  
  Introduction to Compilers and Language Design - [https://news.ycombinator.com/item?id=19728749](<https://news.ycombinator.com/item?id=19728749>) - 2019년 4월, 댓글 1개

- C와 그 특이한 관습 주변의 좁은 범위 안에서만 맴도는 느낌임
  - 아마 의도된 구성일 것임  
    책 설명에도 “독자가 **C와 비슷한 언어**를 받아들이는 간단한 컴파일러를 만들 수 있게 하는 한 학기짜리 입문서”라고 되어 있음

- 서문에 따르면 **Dragon Book**은 고급 대학원 수준이라는 건가?
  - Dragon Book은 좀 특이함  
    고전이긴 하지만 계산 이론의 기초만 어느 정도 다루고, 나머지 컴파일러 내용은 빠르게 훑는 수준에 가까움  
    현대 대학원 수준의 컴파일러 주제들은 제대로 다루지 않고, 실용적인 책도 아님. Tiger Book이 실무와 이론의 균형 면에서 훨씬 나은 입문서임  
    정말 고급인 컴파일러 주제들은 단일 책 하나로 잘 커버되기 어렵다고 봄
  - 2006년판 서문만 봐도 저자들은 이 책을 대체로 **대학원 수준 교재**로 생각하는 듯함  
    “이 책의 전부 또는 대부분을 다루려면 최소 두 쿼터나 두 학기가 필요하다. 보통 전반부는 학부 과정에서, 코드 최적화를 강조하는 후반부는 대학원 또는 중간 수준의 두 번째 과정에서 다룬다”라고 되어 있음

- 언어를 설계하고 컴파일러를 만드는 사람들을 보면 정말 대단하다고 느낄 때가 있음  
  궁금해서 직접 언어를 만들어보려 했지만 너무 어려워서 간단한 **C 백엔드**로 타협했음. LLVM에 기여하는 사람들은 어셈블리 생성까지 전부 알고 있을 것 같고, 정말 놀라움
  - 꼭 그렇지는 않음  
    웹 개발자였다가 LLVM을 기반으로 하는 컴파일러 쪽 일로 옮겼는데, LLVM 자체는 거대해서 모든 영역과 메커니즘을 익히기는 쉽지 않음  
    하지만 복잡하지 않은 **패스 작성**, 버그 수정, 회귀 수정에는 대단히 특별한 지식이 필요하지는 않음
  - **어셈블리 생성** 자체는 사실 꽤 단순하고, 어려운 건 모든 것을 최적화하는 쪽임  
    어셈블러를 작성해보는 것은 컴파일러 구조에 익숙해지는 좋은 방법임. 최적화나 타입, 고수준 언어를 복잡하게 만드는 여러 기능을 신경 쓸 필요가 없기 때문임
  - 새 언어를 배울 때 **어휘 분석기/구문 분석기**와 REPL을 빠르게 만들어보는 걸 가장 좋아함  
    직접 만든 언어 문법의 프런트엔드와 작은 평가 루프만 구현해도 실제 언어의 많은 부분을 살펴볼 수 있음. 실제 문제 해결에 발목 잡히지 않아서 배우고 가르치기에도 좋음  
    그러니 간단한 C 백엔드로 타협했다고 부끄러워할 필요는 전혀 없음

- 목차만 훑어봐도 **언어 설계**의 주요 주제들은 거의 보이지 않음  
  제목보다는 그냥 “컴파일러 입문”에 더 가까워 보임
  - 학부 수준에서 언어가 어떻게 동작하는지 핵심 주제를 따라가보는 구성으로 보임  
    Python이나 Ruby, 더 단순한 Pascal 컴파일러 같은 것을 이해하는 데 맞는 수준임  
    컴파일러와 언어 설계는 이 업계만큼 오래된 분야라서 한 과목에 담기에는 지식이 너무 많음. 그래도 이 강의는 괜찮고, Dragon Book 기반의 비슷한 강의들보다 낫다고 봄
  - 프로그래밍 **언어 설계**를 배우려면 어떤 책을 추천하나? 빠진 주제들은 무엇인지 궁금함

- AI 주제와 소음 사이에서 이런 **컴파일러 글**을 보니 반가움
  - 맹목적인 AI 혐오의 묘한 점은, 증거 없이 아무 글에나 **AI 쓰레기**라고 붙여도 반AI 진영이 근거 없이 싫어한다는 것임  
    올바르고 품질 높은 AI 활용도 가치 있고, AI가 아닌 작업도 가치 있음. 사람들의 작업을 무작정 깎아내리기보다 AI 관련 결과물에 대해 타당한 기준이 있으면 좋겠음

- 좋은 글임  
  훌륭한 예시들로 예전에 배운 지식을 다시 **선명하게 다듬어주는** 점이 인상적임
