Build the main stages of a compiler: lexing, parsing, type checking, intermediate representation, optimization, and code generation. You will connect formal language ideas to a small working compiler pipeline.