We will be building the ``back end'' for a simple compiler for a subset of Oberon-2. There will be two sub-projects: static semantic analysis (type checking) and code generation. We will be generating code for the Sun Sparc architecture. See the project assignments for full details.

Please see the grading page for details on the grading policy for this project. It is likely different than previous quarters.

Many students stop attending lecture to work on the compiler. This is a mistake. Both the lectures and discussion section strongly emphasize the project. Techniques are taught, hints are given, and example code is provided. Without these, you will find the project--not to mention the exams!--much harder. You may find that 5 minutes in class saves you 5 days in the lab.

One comment about projects: Start early! The projects in 131b are much harder than those in 131a because there are fewer tools to help you. If you delay beginning (or finishing) your project you may find some unpleasant things happening to you:

All these things have happened! Often three or more of them happen at the same time. Murphy was an optimist.

Besides beginning early and sticking to your milestones, many of these problems can be avoided by compiling and running your project frequently, rather than waiting until the end. This is the principle of horizontal step-wise refinement: getting something running early and then adding to it in such a way that it is always runnable, at least on a subset of the inputs.