This report describes the programming language and implementation \emph{Boppi}. First a summary of the language is provided, listing the kind of features in the language. Next is a description of language features including examples and semantics. This is followed by a description of Java classes used to compile the language and a listing of changes to the ILOC virtual machine. Then the obstacles encountered during development and solutions to them are covered. Lastly, a description of test programs and concluding words about the project are provided.


\section{Language overview}
As per the project description, the language description is written in \emph{ANTLR 4}, leveraging its support for direct left-recursion and far lookahead. The compiler chain is written in Java and compiles Boppi programs to the \emph{ILOC} virtual machine language. ILOC was chosen for its simple instruction set and ability to extend and inspect the virtual machine.\\
A library for dynamic allocation and for basic functions were written in ILOC.\\

Boppi includes the following features:
\begin{description}
    \item[basic expressions] comprise arithmetic with integers, comparisons with integers, characters and booleans.
    \item[conditionals] comprise constructions equivalent to \verb|if|, \verb|if else| and \verb|while|.
    \item[variables (and constants)] names that have an explicit type and that can be assigned a value. Moreover these have a scope (between \verb|{ }| or within conditionals and functions) in which they can be used. 
    \item[functions] pieces of code that can be called from somewhere else. These pieces may take parameters and return a value. Functions in Boppi can be saved in variables. Moreover, variables declared within a function can outlive a call to the function, thereby creating a \emph{closure}.
    \item[arrays] a sequence of values of a certain type. Arrays in Boppi are created at run-time and may have any non-void type.
\end{description}
