These projects are designed to minimize boilerplate programming, and focus on understanding conceptually difficult problems at a deep level.
Except for Project 3, the labs involve extending a single C++ program with additional functionality. This functionality will be managed by flags, and will use Git tags to manage the different releases. Backwards compatibility is required.
Some projects will have an associated lab report.
Start early and pace yourself. Many programming tasks are more difficult to complete in a single stretch than over days or weeks. Some of these projects are impossible to complete in a single stretch. Expect to spend significant time analyzing the problem throughout the implementation.
Some projects will contain a checkpoint, where you are expected to have working code for a simplified version of the problem. These checkpoints count towards the project grade.
Except for Project 3, project information, tests cases, executables, and scripts will be included in the following shared repository.
In this project, you will take a collection of useful functions, and a incomplete Main file, and construct a working C++ program from them. This code base will be maintained throughout the semester.
In this project, you will construct an lexer and parser for a subset of the ILOC assembly language. You will take as input an ILOC file, and print either the stream of tokens, an intermediate representation, or ILOC code. A significant part of the project is the hand-written, character by character, lexer.
GitHub Classroom Link
In this project, you will construct an allocator that takes a block of ILOC code that uses an unbounded number of registers, and returns an equivalent block of code that uses only a fixed number of registers.
GitHub Classroom Link
In this project, you will construct an LL(1) parser generator that will take a language specification, and returns both human-readable information, and LL(1) tables suitable for parsing.
GitHub Classroom Link
In this project, you will construct an instruction scheduler for straight-line code, targeting a virtual machine with heterogeneous functional units.
GitHub Classroom Link