We build a small compiler out of the standard components: a tokenizer, a parser, and a code generator. By the end, we successfully compile some code in our language, producing JavaScript output that we can execute. Most compilers are highly optimized for speed, but ours will be optimized for easy readability and understanding.