This project is designed to minimize boilerplate programming, and focus on understanding conceptually difficult problems at a deep level.
These components involve extending a single C program with additional functionality. This functionality will be managed by flags, and backwards compatibility is required.
Some components 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.
Component information, tests cases, executables, and scripts will be included in the workspace repository.
A suggested schedule of work throughout the semester may be found in the Course Calendar.
All requirements use MUST, SHOULD, MAY, and their negations in accordance with RFC 2119.
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.
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.
In this project, you will construct an instruction scheduler for straight-line code, targeting a virtual machine with heterogeneous functional units.