A full compiler in OCaml built from the ground up which compiles the Oat programming language into X86 assembly using LLVM intermediate representation. Supports structs, arrays, function pointers and type checking as well as optimizations for dataflow analysis and register allocation.
A full specification of the Oat language can be found at https://www.cs.princeton.edu/courses/archive/spring19/cos320/hw/oat2.pdf