The Boppi compiler chain has two stages after parsing: annotation and generation. The first stage performs type checking, variable and function linking, variable offsets and variable assignments. This can be seen in \cref{boppi-checker}. The second stage performs register assignment and code generation, as can be seen in \cref{boppi-generator}. \begin{code} \caption{Type checker and annotater for the Boppi compiler.} \label{boppi-checker} \inputminted{java}{\projectroot src/pp/s1184725/boppi/BoppiChecker.java} \end{code} \begin{code} \caption{Code generator for the Boppi compiler.} \label{boppi-generator} \inputminted{java}{\projectroot src/pp/s1184725/boppi/BoppiGenerator.java} \end{code}