MiniJava is a subset of Java. This compiler takes MiniJava source files as inputs and outputs corresponding MIPS assembly code, and meanwhile generates intermediate representations Piglet, Spiglet and Kanga. The entire procedure consists of phases such as type checking, generating and simplifying assembly-like code, allocating registers and adding stack frames.
More details about the project: http://web.cs.ucla.edu/~palsberg/course/cs132/project.html
Slides in Chinese: https://yuren-zhong.github.io/static/presentation-minijava2mips.pdf