My very last class at Indiana University was P423 - Compilers. It was a project course, with the goal of the semester being the construction of a Racket compiler that supported functions.
We broke this difficult task into easier steps, each one translating an intermediary language to something a bit closer to the assembly. Along the way we implemented conditionals, vectors, static and dynamic typed data, and finally user-defined functions.
Our final project was to build on our compiler in a novel or useful way. I chose to focus on optimization of the input code, aiming to produce simpler assembly programs in less time. Check out my final presentation here: