Project: A programming language interpreter

For your course project, you will design and implement a medium-sized programming language. You will work in teams of 3-4 people.

The “paradigm” of your language, and the specific features it provides, are up to you! We’ll provide a menu of paradigms and features for you to pick from, but you’re also welcome to go “off menu” and design a language with features that we haven’t suggested.

The goals of the project are to:

  1. Encourage you to think about language design.
  2. Get practice implementing a programming language from scratch.

Project description

The project description is split across three pages. Please read each of these pages carefully and thoroughly!

  • Language Design – This page includes both general information about designing programming languages and also specific instructions for designing your language for this project.

  • Project deliverables – This page describes exactly what you will submit for your project.

  • Project grading – This page describes how the milestone and the final project submission will be graded.


You will submit your project in two phases: a milestone and your final submission. Both submissions should be a single .zip file containing all of the project deliverables. Your milestone submission will represent a work-in-progress, as described below, while your final submission will obviously be your finished project.

Milestone submission (Thurs, Feb 27)

The goals of the milestone are to:

  • Develop and motivate your language design.
  • Make substantial progress on your language implementation.
  • Get feedback from your assigned TA.

At this milestone, you should submit the following:

  • A complete draft of your design document.

    This means that you will have decided on your language’s paradigm, chosen a set of language features that you plan to implement, decided what level each of those features should be implemented at (and why), decided what your safety properties are, and decided what your semantic domains should be.

    It is expected at this point that you may still make changes before the final submission, that your design will improve, and that you may be unsure about some things. This is your one opportunity to get feedback, so it’s important that you do this to the best of your ability. You may also want to clearly indicate specific questions that you have.

  • A complete draft of your README.

    This must include your team members and brief introduction, and should include brief instructions about how to execute whatever is working so far.

  • At least 50% done with your language implementation (more is better!).

    At this point, you should certainly have implemented an abstract syntax, at least one of your good examples, and some bad examples. You should have made substantial progress on your semantics implementation by implementing several of your easier features. If you have not yet implemented your harder features, you should have a high-level plan for how those will be implemented and this plan will be reflected in your choice of semantic domain.

Final submission (Thurs, Mar 12)

Submit your final version of everything described on the project deliverables page. Good luck!

Back to course home page