Project Description
COP-5621 Compiler Construction
Table of Contents
Overview
Pick something that is larger than a programming homework, yet achievable in a few weeks before the end of the semester. It should be related to programming language design and implementation in some way. If you have a personal project you are working on, that is okay as well, as long as you clearly delineate a portion to work on for the class, i.e., don't just take something you've already done. Try picking something you're curious about or interested in already. It may also be something academic, such as an in-depth study or literature review of a specific area of programming languages and compilers.
Final presentation guidelines
- Suggested structure can follow the proposal
- Motivate the problem, give the intuitive
- State the goals
- Briefly overview the technical aspects
- Evaluate or show that the goals were achieved
- Can have a recorded demo
- Grading
- You will be evaluated based on what you proposed, with an awareness that plans don't always work out
- You won't be penalized if you have a good story around any changes in goals or results
Logistics
- Propose the project first by the proposal due date. Write what you want to achieve, roughly the technical steps, and how to measure achievement.
- Propose something that would take at least around 2 weeks.
- Prepare a brief (no more than 10 minutes including time for questions) presentation/demo of your project by the project due date.
- Submit the project according to the syllabus.
- Work on your own. Group projects possible in compelling cases.
- Everyone should have a different project. We can coordinate this via chat.
- Follow the rules about academic integrity.
Sample project ideas
There are two categories of projects, building on the SimpleC compiler or de novo projects.
Build on the SimpleC compiler
- Add some new language features, e.g., additional types of loops, more types, new function call semantics, pointers, arrays, first-class functions, immutable variables, etc.
- Add improved type-checking/analysis, e.g., more flexible function types, return statement(s) in all paths, etc.
- Add optimizations to intermediate code or machine code
- Implement control- and/or data-flow analyses from source, intermedite, or machine code
- Add a new machine code backend, e.g., arm, mips, etc.
- Develop an interpreter for source, intermediate, or machine code
- Design a new intermediate language
- Port the front-end to a different intermediate language, e.g., LLVM
- Improve error handling and reporting
- Implement union/find type inference
- Support heap allocation
Other project ideas
- Develop a source-to-source transformations, e.g., SimpleC to Rust, ANTLR's visitors can help with this
- Write a binary transformer, e.g., from x86 to ARM
- Implement an emulator for binary programs, e.g., for the Motorola 68000
- Implement a scheme interpreter in scheme
- Design a new source language and implement a compiler to our class's intermediate language