👋 These are the collection of resources I used to study compilers in my spare time. It is still evolving as I continue to learn.
-
These two courses, when combined, serve as an introduction to the compiler. The video lectures from Stanford are heavily weighted on the front-end part. And since I want to learn LLVM along with compiler theory, I instead did the assignments in the Princeton class. It covers more materials from Stanford but lacks video lectures. 6 assignments involve building an ML-like compiler in C++.- Lexical analysis with Flex
- Parsing with Bison
- Code generation using LLVM IR Builder (this is fun !)
- Instrumenting code with LLVM Pass (Edge and Block Profiler)
- SuperBlock Formation
-
Building the LiveOak-3 (Java-like) programming language
As a part of my graduate coursework, I built an object-oriented language and got a chance to hand-code an LL(1) Recursive Descent Parser - oh, it was beautiful once done (but I cannot share !). Also, code generation with Stack Machine was a pain in debugging and made me appreciate LLVM IR Builder. -
Engineering a Compiler - I read this back-to-back and found that I couldn't get a good grasp of compiler optimization and back-end development without lectures.
The compiler optimization and backend are cool - currently, this is just my feeling.
I'm going to validate that.
-
Compiler Optimization - Sorav, Bansal - IIT Delhi
I like his teaching style. And the playlist is comprehensive.
-
Compiler Optimization by U of Toronto | videos
This course has assignments using LLVM covering
- LLVM Pass
- Dataflow Analysis framework
- Loop-Invariant Code motion
I believe it is modeled after the course from Carnegie Mellon (assignments are pretty much the same). I will do the assignments, but prefer to have the lecture from IIT (I like the pace there more).
-
Cornell CS6120 This one is more like a graduate-level seminar + lectures. I plan to do this last as it involves exploring with paper. But the guy teaching it looks cool.
Here are the books I have beside me