Programming Language Implementation
- Wednesday/Friday 11-noon or by appointment.
- All office hours and appointments are done remotely.
- Please send me an email indicating a timeslot you would like to meet and I will send you a Google Meet invitation.
Office Hours: Tuesday 12:00 - 2:00 pm
Remote Only (see BrightSpace)
If any of these questions interest you then CSC402 is for you. We will spend
the semester looking at programming language implementations: from syntax
highlighters to code analyzers, from interpreters and virtual machines to
- Have you ever wondered how the syntax highlighter in Eclipse works?
- Have you ever wondered how your favorite programming language is implemented?
- What is the difference between interpreting a programming language and translating/compiling it?
- What is the difference between an interpreter and a virtual machine?
As part of the course we will construct interpreters and translators for domain
specific languages such as calculator languages and command line languages for
steering your favorite game character. The course will also include one large
semester project of a language implementation project of your choosing. This
could be a graphics language, a new programming language (think Rust or Go), a domain
specific language such as PHP or a new command line shell interpreter for
The goal of the course is to give you a solid foundation with respect to
programming language implementation which includes grammar construction, parsing
techniques, intermediate representations, tree construction, tree pattern
matching techniques, among many other topics. The course is designed around a
set of programming language implementation design patterns that shed light on
the overall construction of programming language processors. These tools will
enable you to add domain specific and general programming language
implementations to your tool chest to solve difficult engineering problems.
Final Project Ideas
When I say implementation that could mean: as an interpreter, as a compiler to a virtual machine,
or as a compiler to actual machine code.
An implementation of a subset of a game scripting language such as Lua
An implementation of a subset of C (e.g. Small-C
or Tiny-C) or any other general purpose programming language.
Design and implement a language to program cellular automata (CA).
Design and implement a language interface to the JMusic
Design and implement an interpreter for a graphics/drawing language, e.g. Logo.
Implement an interpreter or compiler for Vintage Basic (Altair Basic).
Documents of Interest:
If you want to make use of the Jupyter notebooks interactively then you will have to
install Anaconda and git (if it is not installed yet -- on Macs git is installed by default):
- Go to the Anaconda distribution page and download
Anaconda for your OS ( Python 3.x version)
- If you have not worked with git before then got to this tutorial
and work your way through it -- only takes a few minutes.