This is a heavyweight project class that only programming geeks would love to take. The entire class is nothing but a project to build a Java compiler. The compiler takes .class files (bytecode) as input and generates X86 executable code. The course will give you hands-on experience with compiler construction and optimizations.
CS 142 (a) and C/C++ programming experience.
The course has five separate phases, and each phase is constituted by a lecture (given by me or the TA) that introduces the goal of the phase as well as a number of lab sessions.
Phase 1: Parsing .class files
Phase 2: Building a Java interpreter
Phase 3: Building SSA
Phase 4: Developing SSA-based optimizations (e.g., register allocation and other dataflow-based optimizations)
Phase 5: Generating X86 machine code
Each student needs to give a demo presentation on his/her project at the end of the quarter. I will provide a set of simple Java programs to test your compiler. You can get at least a B if your compiler can do phase 1, 2, and 3. If phase 4 and 5 are implemented and your compiler passes all my test cases, you will get an A. If your compiler does everything and has one additional dataflow optimization implemented, you will get an A+.
Thanks to Michael Franz, Shannon Alfaro, Mason Chang, and Eric Hennigan for providing advice and help with this course.