Write an attractively formatted technical manual for your compiler, including a title page and table of contents. The title page, in addition to the usual information, should specify which feature level (C, B, A) your compiler implements. The manual should include the following sections:
Introduction - give a brief, one paragraph introduction describing the purpose and contents of the manual
Usage - describe how to run the compiler; command line options supported; how to assemble and link the output manually when -S option used
Features - List the language features supported by your compiler. After the list, provide detailed notes on any features where limitations or extensions apply. Also discuss any optimizations performed: give Dream code fragments that illustrate the conditions where they are applied, and provide assembly output demonstrating the result. Optimizations that are not effectively demonstrated in the manual will receive no extra credit.
Technical Notes – This section is the meat of your user manual, and should be given the most attention. Discuss the following:
the tools and versions used to build the compiler (ANTLR, VSCode, Gradle, …)
the overall organization of the compiler (describe the stages of the compiler, and discuss the key classes and the roles they play in each stage; discuss your Intermediate Representation)
Discuss Dream runtime memory management. Provide a diagram of the organization of the activation records and the runtime stack for a sample program. Talk about how object and array memory is allocated/deallocated. Discuss how you prevent memory leaks (if you do).
Explain how you do I/O and memory management: do you call read/write system calls directly from your assembly code? call assembly wrappers to system call functions? call your own home-grown functions? Explain what they do and how they work.
If you do string processing, talk about how the string functions are implemented, and discuss how you handle string literals.
If you support polymorphism, discuss the virtual function table and give an example of how you generate it. If you do runtime type checking, discuss that also.
Testing and Bug Report - List all of the official test files you tested your compiler with. For each file, give the input you provided (if any), the runtime output that resulted, and note whether the test succeeded or, if problems occurred, describe the problems. Summarize the results in a pass/fail report table, and provide input/output details to back up the table. Additionally, describe any known bugs; give Dream source code fragments that illustrate the conditions under which the bugs will arise.
Note that, if you do C or B level feature set, you should test your compiler against test files for the higher-level feature sets; it should report “feature unsupported” messages, and not crash. Also, you should test your compiler with additional files that you create. However, you need not include these test results in your manual, unless your compiler has trouble with official test files and you want to demonstrate what works.
Appendices - Attach the Dream grammar from the class website, and a printout of your Dream.g4 file.
A rough draft of your manual is due Tuesday, April 23, 9:30 am. Upload a PDF copy of your manual to your phase5 submission folder with the filename manual-draft.pdf.
Manual submission is due Thursday, April 25, 9:30 am. Upload a PDF copy of your manual to your phase5 submission folder with the filename manual-final.pdf, and turn in a printed copy. For +5 points extra credit, have the printed copy professionally bound, using spiral binding, unibinding, or saddle stitch. The Bellis Copy Center can do this, but check on the turnaround time.