In this class, you will be writing a compiler for a toy programming language, which we will call, TL09. Over the course of the semester, you will be writing a complete compiler that translates from TL09 into MIPS assembly code that is executable using the SPIM MIPS Simulator. You may choose to implement your project in Java, C++, Standard ML, or Scala; I will be able to provide the most advice if you choose Java.
For grading and evaluation purposes, the project is divided into three phases. The first, "Phase I", requires the implementation of a recursive descent parser for the TL09 program language that can output parse trees (in a graphviz dot file) for programs in TL09. The second, "Core" requires completing the compiler so that it outputs MIPS assembly code (and also producing intermediate output includes a type-annotated-AST, and a control flow graph labeled with ILOC instructions). The third, "extensions" will consist of extending the non-optimizing "Core" compilier with optimizations and/or language extensions (the exact specification of which will be posted later).
Each student will be provided a subversion repository in which to store their project. At 7pm on 9/25 and 6:45pm on 10/15, 10/29, 11/19, and 12/3, the TA and/or instructor will checkout the current contents of the repository for grading. It is the students responsibility to make sure that the repository is properly formatted, the README in the repository is up to date, and the code in the repository builds at the deadline.
A grading breakdown and rubric delinates what criteria will be used at each of the deadlines.
Any student who receives a score of less than 75% for "Phase I" and/or "Core" will have an opportunity to have those regraded for a maximum score of 75% at the end of the semester.
Please refer to the detailed submission instructions for information on how to layout your directories and submit them through subversion.