CS 444/644 - Compiler Construction (Winter 2021) - Assignment 0
Choosing a group
The overall project for the course is to write a compiler from Joos 1W, a fairly large subset of Java, to
i386 assembly language (the Netwide
Assembler dialect). The project will be done in groups of
three. The project will be broken up into several assignments
with fixed due dates. The assignments must be submitted to the Marmoset on-line submission
and testing system. For each assignment, you will submit
both your code and a written report to Marmoset.
The project may be done in any programming language of your choice,
as long as it can be practically installed in the linux.student.cs
environment. If your language of choice cannot be installed,
you may have to choose an alternative language.
One of the goals of the course is for you to understand how compilers
and compiler generation tools work, rather than relying on them as
mysterious black boxes. Therefore, your compiler must use only code that
you wrote or that is provided to you by the instructor. Your compiler
may use machine-generated code, as long as the code that generated it
was written by you or by the instructor. You may not use code obtained
from elsewhere or code generated by code obtained from elsewhere;
in particular, you may not use generators such as lex or yacc. You
may not use external libraries obtained from elsewhere. You may use the
standard library that comes as part of the programming language that you
choose to use. However, you may not use any scanner or parser generator
that may be included in the standard library of your language of choice.
If you have any doubts about which code you may or may not use, please
ask the instructor for clarification.
Each group must use git for revision control. You may choose one
of the following online git servers to share code within your group.
Do not post any of your code to any publicly readable repositories.
- git.uwaterloo.ca uses
the GitLab software. It is already
configured with your WatIAM (Quest) userid, so you can begin
using it just by logging in and adding your group members
to your project (after they have also logged in for the first time).
Your data is stored at the University of
- github.com is a commercial
provider of git hosting services. If you choose to use
GitHub, you must create a personal account for each group
member and send me the account names. I will then create
a shared repository for your group.
You are not required to use GitHub. You may use git.uwaterloo.ca
instead. GitHub is a corporation
based in the United States. If you choose to use GitHub,
be aware that any data that you choose to send to GitHub
is not protected by the privacy policies and laws of the
University of Waterloo, Ontario, or Canada.
For assignment 0, do the following tasks:
- Choose a group of three.
- Agree on an implementation language, and determine whether
it is already available on the linux.student.cs environment, or if
it is easy for you to install yourself. For example, many
languages come with a compiler written in Java that translates
to Java bytecode.
- Agree on whether you will use git.uwaterloo.ca or GitHub.
- Send an e-mail to firstname.lastname@example.org (add .uwaterloo.ca after student.cs) with the following information:
- Names and WatIAM (Quest) userids of the members of the group
- The programming language that you would like to use, and
whether or not it is already available in the linux.student.cs
environment. If you installed it yourself, include detailed
instructions on how you did so.
- Whether you plan to use git.uwaterloo.ca or GitHub.
If you plan to use GitHub, include the GitHub usernames of your
Throughout the term, your group will have
short (10-minute) weekly status meetings with a TA, on Thursdays.
Indicate your time preference for these meetings by ranking the following
time periods from (1) most preferable to (6) least preferable:
These times are Eastern time (Waterloo/Toronto).
If one or more of your group members are in any other timezone,
also indicate your timezone(s) in the e-mail.