
Ask HN: Recommend an introductory course on compilers - rochak
I am doing Bachelors in Information Technology and to my bad luck, my curriculum does not have a course on compilers. I looked online and found one on Coursera only to realize that it has now been removed. Could you guys recommend a good compilers course or book which gives a good introduction to the topic along with a guided practical implementation? I would be much obliged.
======
n00b101
This is not a course, but a practical tutorial that will teach you the "nuts
and bolts" and get something pretty cool (a JIT compiled REPL) working easily:

[http://llvm.org/docs/tutorial/](http://llvm.org/docs/tutorial/)

These are examples in C++ and OCaml.

There's a similar tutorial in Python as well, which should be easier to get
running:

[http://www.llvmpy.org/llvmpy-
doc/0.9/doc/kaleidoscope/Python...](http://www.llvmpy.org/llvmpy-
doc/0.9/doc/kaleidoscope/PythonLangImpl1.html)

------
zachgersh
Not a full course (apologies in advance) but I have heard a lot of people get
a good introduction from:

[http://compilers.iecc.com/crenshaw/](http://compilers.iecc.com/crenshaw/)

It was written with Turbo Pascal in mind but many have read the text and
transcribed the instructions to a language of their choosing. Should be at
least a good introduction to compilers.

~~~
rochak
No need for any apologies. I am looking for anything that can introduce me to
the topic along with practical knowledge

------
dstein64
Here's an HN comment from last week that included links to a compilers course
(a course from HN user jpolitz, who posted the comment).

[https://news.ycombinator.com/item?id=13207695](https://news.ycombinator.com/item?id=13207695)

Here are the links:

[https://www.cs.swarthmore.edu/~jpolitz/cs75/s16/index.html](https://www.cs.swarthmore.edu/~jpolitz/cs75/s16/index.html)

[https://github.com/compilers-course-materials/](https://github.com/compilers-
course-materials/)

[https://github.com/compilers-course-
materials/cs75-s16-lectu...](https://github.com/compilers-course-
materials/cs75-s16-lectures)

------
Joe8Bit
James Kyle (who created Babel) wrote a 'Super Tiny Compiler' that's a really
great (low barrier to entry) place to start.

The inline docs are super well written, clear and extensive. It's also
implemented in JabaScript.

It's an amazing learning tool and I really loved reading it!

[https://github.com/thejameskyle/the-super-tiny-
compiler](https://github.com/thejameskyle/the-super-tiny-compiler)

~~~
farax91
I thought it was that young aussie guy, Sabastian that created babel? It was
initially named 6to5 to my best memory, and later renamed Babel.

~~~
ENTP
You are correct.

------
wkandek
I enjoyed this book by Niklaus Wirth - father of Pascal, Modula-2 and Oberon.
[https://www.amazon.com/Compiler-Construction-
International-C...](https://www.amazon.com/Compiler-Construction-
International-Computer-Science/dp/0201403536)

------
nils-m-holm
[http://t3x.org/reload/](http://t3x.org/reload/)

A tour through a clean subset of a C compiler, full C source code included.
It's not exactly a course, but will introduce all basic parts of compiler
construction on the theoretical and practical level: lexing, parsing, code
generation, optimization, and runtime support. The complete code from the book
is in the public domain: [http://t3x.org/subc](http://t3x.org/subc)

For the record: I'm the author.

------
tzs
Allen Holub's book "Compiler Design in C" is excellent. The book is out of
print, but you can get it as a free PDF from Holub's site:
[http://www.holub.com/software/compiler.design.in.c.html](http://www.holub.com/software/compiler.design.in.c.html)

Over the course of the book you implement compiler construction tools (a LEX
clone and two YACC clones) and then use those to build a C compiler.

------
e12e
Great question. In addition to all the "serious" answers here, I'd recommend
the nice "How I start" article for nim:

[https://howistart.org/posts/nim/1](https://howistart.org/posts/nim/1)

As well as playing a bit with ometa:

[http://www.tinlizzie.org/ometa-
js/#Sample_Project](http://www.tinlizzie.org/ometa-js/#Sample_Project)

------
demosthenes111
MIT has a course called 6.035 which might be of use. Unfortunately the ocw
page doesn't have lecture videos, but there seem to be some on YouTube if you
search for it and the notes on ocw could help. Good luck!

[https://ocw.mit.edu/courses/electrical-engineering-and-
compu...](https://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-035-computer-language-engineering-spring-2010/)

Edit: here's some videos [https://ocw.mit.edu/courses/electrical-engineering-
and-compu...](https://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-035-computer-language-engineering-sma-5502-fall-2005/lecture-notes/)

Also maybe check out the recommended text: Modern Compiler Implementation in
Java (Tiger Book)

And a few more resources here:
[http://cons.mit.edu/sp14/references.html](http://cons.mit.edu/sp14/references.html)

------
checker659
You should split your study into three parts.

1) Theory of computation (can't recommend a book for this one)

2) Programming language theory (Book: Programming Language Pragmatics)

3) Compiler construction (Book: Engineering a compiler or the Dragon Book)

~~~
brudgers
1) The classic is _Introduction to Automata Theory, Languages, and
Computation_ by Hopcroft and Ullman.

Ullman used to have a course on Automata via Coursera but the platform changes
have sent it down the memory hole.

------
tymm
I recently began with
[https://lagunita.stanford.edu/courses/Engineering/Compilers/...](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014)

Until now I think it is good (I'm in the second week of the course).

------
sn9
The Coursera course can be found on Stanford's site:
[https://lagunita.stanford.edu/courses/Engineering/Compilers/...](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)

It's self-paced now.

------
krat0sprakhar
Here's a list of courses that should help -
[https://github.com/prakhar1989/awesome-
courses#programming-l...](https://github.com/prakhar1989/awesome-
courses#programming-languages--compilers)

------
yogeshp
There are few courses on compilers listed in this list:
[https://github.com/Developer-Y/cs-video-
courses](https://github.com/Developer-Y/cs-video-courses)

------
jedmeyers
Very good question. I am interested in reading the suggestions as well. Also,
a specific book question: is Engineering a Compiler by Cooper & Torczon any
good?

~~~
cvoss
The compiler course I took was taught by Keith and Linda. Keith is certainly
one of the best educators in the department, and, in my opinion, their book is
also of high pedagogical value.

For me, its shining moments are the explanations of abstruse algorithms. The
text takes the time to work through interesting example runs of the algorithms
that illustrate all the facets of the computation. This was critical to my
understanding of how the algorithms work, why they need to work that way, and
how competing algorithms differ.

It's also not the kind of book that needs to be read cover to cover. We went
through the chapters out of order. If you can find matching lecture slides,
that can be a great guide or survey of the material.

