Wednesday, January 23, 2013

Compilers Self-Study

Learning about Compilers

This is a self-study curriculum I intend to follow to teach myself about compilers in my spare time. It is the union of a few different curricula I have been find through various sources online, such as MIT's OpenCourseWare.


I am basing my introductory studies on the classic so-called "Dragon" and "Tiger" books, respectively:
Subsequent advanced studies may include:


Once oriented to the course material I plan to start a compiler project, written in C++. I would like to write a C compiler for the ARM1176JZFS architecture, which is part  of the Broadcom BCM2835 SoC, the chip inside of the awesome Raspberry Pi pocket computer. The point of this compiler is not to compete with the gcc or clang/llvm but rather to learn the way a compiler works by building one.


On a high level compilers are divided into two halves, one called the front end and the other the back end. The front end is responsible for parsing the input program, building a syntax tree, and generating an intermediate representation output. The back end takes the intermediate representation, applies machine-independent and then machine-dependent optimizations, and generates the output binary. I will work front to back.

Front End, January to April 2013

  • Study Dragon book (Aho et al) chapters 1-6
  • Study Tiger book (Appel) chapters 1-7
  • Study EACV2 (Cooper, Torczon) chapters 1-5
  • Write high-level design document for project compiler
  • Write detailed design document for project compiler front end
  • Implement compiler front end to translate input C to output intermediate bytecode

Back End and Intro to Optimization, April to October 2013

  • Study Dragon book chapters 7-12
  • Study Tiger book chapters 8-12
  • Study EACV2 chapters 6-12
  • Write detailed design document for project compiler back end
  • Implement compiler back end to translate input intermediate bytecode to output ARM assembler
  • Add some basic/simple optimizations to project compiler

Advanced Compiler Topics, October 2013 Onward

  • Study remaining bibliography
  • Further work on optimization in project compiler back end
  • Possibly contribute to LLVM or V8 projects
  • Other work, details TBD


  1. Writing a great college admission essay is really a very daunting task. even though This is sole 500 words You will need to write, It really is ones hardest portion of an college application form process. There are 3 goals that you must perform Making use of your essay writing service; primary you want to convince your admissions officer you might be worthy regarding accessibility for you to the college, IN ADDITION TO second you would want to show them you\'re not just a great GPA or even standardized score, you happen to be the real end user The idea wants to represent their college.

  2. A gigantic measure of government cash was being paid out to organizations offering business web page simply a couple of bits of paper containing a lesson which was effectively printed off from the web.