This is a compiler for a small language called Ristretto, consisting of integer and boolean expressions and statements, arrays, and functions.
The language is based on the Xi language by Andrew Myers, used in his compiler class at Cornell.
The design of the compiler is based on the MiniJava compiler by Jens Palsberg. Each phase of the compiler has a concrete syntax that can be used as input to the next phase. This makes it easier to break the compiler up into digestible parts for a class. In particular, it is not required that a previous phase of the compiler be completely working for the next phase to be implemented.