For my second second year mini-project I created a compiler that compiles a subset of the Java language (with some minor modifications) to Java byte codes executable on a Java Virtual Machine. The catch is that it only uses a procedural subset of the byte codes so that it is similar to compiling to assembly code with no classes, objects, method calls etc. This means that the compiler must compile object oriented features such as polymorphism and virtual method dispatch into simple instructions. The project was graded A+.
There was a nifty JSP/servlet web interface, but I have nowhere to host it at the moment.