Image

Final Project - Decaf Compiler

Goal

The goal of our semester-long project was to gain experience in compiler implementation by constructing a simple compiler. It is now time to polish your compiler for final submission.

Code Documentation

Your code must be cleanly organized and well-documented. Make sure you remove commented-out dead code and unneeded testing functions. For documentation, you needn't have a formal commend block for every function, but you should provide sufficient documentation for me to understand all of your code. To aid in this, imagine that someone else was going to be taking over the maintenance of your compiler, and you needed to leave enough information for them to easily extend your code.

Command-line Options

No compiler is complete without options, so you must add some rudimentary command-line processing. You should add all of the following options:

    -h              print help/usage text
    -o [fn]         save output to given filename (if not present, use standard out)
    -v              print version and author information

    -fdump-tree     print abstract syntax tree (w/ symbol tables)
    -fdump-tac      print three-address-code

If applicable, you should also add the following options:

    -Wall           enable any optional warnings
    -Werror         treat warnings as errors (i.e., abort)

    -O              enable optimization

User Documentation

Finally, you must prepare some standalone documentation for your compiler. At minimum, this should be a README file with information about the compiler and instructions about how to use it. You could also choose to create HTML or manpage documentation.

Submission

DUE: Friday, May 1, 2015, at 23:59 (11:59PM) EST

Submit a zip or tarball with your complete solution on Canvas. Your code must compile and work on the class server. Part of your grade will be based on automated testing and part will be based on style considerations. Please make sure that your project adheres to the specifications exactly to avoid difficulties with the automated testing framework, and make sure that your code is clean and documented.