Introduction to OCaml programming and warm-up exercises involving tree manipulations and recursive programming. Familiarize with the basic workflow of the projects in the course, including the testing framework that's used to automate the grading.
Implementation of an assembler and simulator for a small, idealized subset of the x86-64 platform that serves as the target language for the compilers built in the following projects. Another goal is to be more comfortable when programming in OCaml.
Implementation of a non-optimizing compiler for a subset of the LLVM IR language. The source language consists of a 64-bit, simplified subset of the LLVMlite. The target language is X86lite as defined in HW2.
Implementation of a compiler frontend for a simple imperative language called Oat that has boolean, int, string, and array types as well as top-level, mutually recursive functions and global variables. The compiler accepts source files and produces an executable that can be linked and executed.
Implementation of a compiler typechecker for an extended version of Oat that has boolean, int, string, array, struct and function pointer types as well as "possibly null" and "definitely not null" references. The compiler accepts source files and produces an executable that can be linked and executed.
The Oat compiler developed until HW5 produces very inefficient code, since it performs no optimizations at any stage of the compilation pipeline. This last project includes several simple dataflow analyses and some optimizations at the level of our LLVMlite intermediate representation in order to improve code size and speed.