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}
