CSC402/CSC502 Homepage
Programming Language Implementation
Fall 2017
Instructor:
Dr. Lutz
Hamel
Tyler Hall Rm 251
Office hours: Monday/Wednesday 11am-noon Tyler Rm 251
email: hamel@cs.uri.edu
TA:
Na Li
Office Hours: Tuesday/Friday 1:00-2:00
Tyler room 136
email: na_li@uri.edu
Announcements:
[11/20/17] *** Final Project due Sunday 12/17 in Sakai ***
[10/25/17] *** Midterm due Monday 11/6 in Sakai ***
Announcements are now handled thru Sakai
[9/5/17] Welcome!
Description:
- Have you ever wondered how the syntax highlighter in Eclipse works?
- Have you ever wondered how languages like PHP and HTML are implemented?
- How about Python and Pearl?
- Or for that matter, Java and JavaScript?
- What is the difference between interpreting a programming language and translating/compiling it?
- What is the difference between an interpreter and a virtual machine?
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
compilers.
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 Ruby), a domain
specific language such as PHP or a new command line shell interpreter for
Unix/DOS.
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.
NOTE: Students taking this course for graduate credit (CSC502) will have to complete an additional
Unix/Linux based project.
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
or Pawn.
-
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
framework.
-
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:
NOTE: email submissions are not
acceptable for assignments.
Assignments and Projects: