LARA

Labs 06: Compiler extension project

You have now written a compiler for Amy, a simple functional language. The final lab project is to design and implement a new functionality of your own choice on top of the compiler you built so far. In preparation for this, you should aim to learn about the problem domain by searching the appropriate literature. The project includes:

  • designing and implementing the new functionality
  • documenting the results in a written report document

This project has several deadlines, detailed below. Please note that the first of them (choosing the topic) is already coming up on Sunday!

Selecting a Project Topic

Deadline: Sunday, Nov 22nd 2020

In the following document, we list several project ideas, but you should also feel free to submit your own by email. All groups will rank the projects in order of preference, and we will then do our best to assign the preferred projects to as many groups as possible. Because not all projects are equally difficult, we annotated each of them with the expected workload. The suggested projects cover a wide range of complexity, and we will evaluate your submissions with that complexity in mind. For instance, for a project marked with (1) (relatively low complexity) we will be expecting a polished, well-tested and well-documented extension, whereas projects on the other end ((3)) may be more prototypical. For all submissions, however, we require that you deliver code that compiles and a set of example input files that demonstrate the new functionality.

Project ideas

To announce your preferences, please fill out this form by Sunday at the latest. You'll have to provide the names of the top exactly 5 projects you would like to work on, in order of descending preference. We will do our best to assign you the project you are most interested in.

Project Orientation

Deadline: Project sessions next week (Wednesday and Thursday, Nov 25th/26th 2020)

We will try to inform you about the project assignment as soon as possible. To give you a chance to validate your understanding of the project and what's expected of you, we will offer dedicated slots during the project sessions next week. Before you join, you should think about the following questions

  • What are the features you will add to the compiler/language?
  • What would be some (short) programs highlighting the use of these features?
  • What changes might be required in each compiler phase and/or what new phases would you add? (Very roughly)

Georg will then meet with you on Discord during your dedicated slot on Wed/Thu to discuss your plans for the project. For simplicity, the schedule will be based on your group#:

Wed  8:00  Group#01
Wed  8:15  Group#02
Wed  8:30  Group#03
Wed  8:45  Group#04
Wed  9:00  Group#05
Wed  9:15  Group#07
Wed  9:30  Group#08
Wed  9:45  Group#09
Wed 10:00  Group#10
Thu  8:00  Group#11
Thu  8:15  Group#12
Thu  8:30  Group#13
Thu  8:45  Group#14
Thu  9:00  Group#15
Thu  9:15  Group#16
Thu  9:30  Group#17
Thu  9:45  Group#18

If for some reason your slot does not work for you, please let Georg know ahead of time (via Discord or email).

Project Presentation

You will present your idea during the lab sessions on the last regular week of the semester (Dec 14th/16th/17th). We'll announce the concrete schedule of presentations at a later point. Instructions on what and how to present your project can be found here.

Project Implementation and Report

Deadline: Jan 7th 2021 23h00

Your implementation and a report are due on this date, and both will be delivered using Git. You will develop your project on top of your implementation of Amy. Please push all development on a new branch lab06, ideally building on top of the codegen lab (branch lab05). As usual, on the day of the final deadline we will tag the most recent commit on lab06 as your submission.

Your repository should contain:

  • Your implementation, which must, to be graded at all, compile and be able to run non-trivial examples.
  • A subdirectory extension-examples/ which includes some examples that demonstrate your compiler extension in action.
  • A subdirectory report/ which includes a PDF summarizing your extension.

If you did not manage to complete your planned features, or they are partially implemented, make this clear in your report!

You are encouraged to use the following (LaTeX) template for your report:

A PDF version of the template with the required section is available here:

Although you are not required to use the above template, your report must contain at least the sections described in it with the appropriate information. Note that writing this report will take some time, and you should not do it in the last minute. The final report is an important part of the compiler project. If you have questions about the template or the contents of the report, make sure you ask them early.

A common question is “how long should the report be?”. There's no definitive answer to that. Considering that the report will contain code examples and a technical description of your implementation, it would be surprising if it were shorter than 3 pages. Please try to stay within 6 pages. A concise, but well-written report is preferable to a long, but poorly-written one.