CS 550
Spring 2014
Programming Languages
Thursdays 18:30-21:20
University Crossings 153

Geoffrey Mainland
University Crossings 106
Teaching Assistant:
Mark Boady
Warning! This material is for an old version of the course.

Course Description

Covers basic concepts of the design and implementation of programming languages, including data representation and types, functions, sequence control, environments, block structure, subroutines and coroutines, storage management. Emphasizes language features and implementation, not mastery of any particular languages.


The text for the course is Benjamin C. Pierce, Types and Programming Languages, The MIT Press, 2002. ISBN: 978-0262162098. We will also use Real World Haskell, which is available online.

Grading policy

Grades will be weighted as follows:

All students have two late days, which may be used at any time to turn in homework late without penalty. After consuming all late days, the late penalty is 25% per day per homework. An assignment that is more than two days late will not recieve any credit.

In the case of extenuating circumstances, please contact me and we will make an appropriate arrangement.


This is a core course required by all graduate Computer Science students and is an elective for graduate Software Engineering students. The course is available to other students with sufficient programming experience (see prerequisites) who have an interest in programming languages (e.g. Information Systems, Computer Engineering, etc.).

Course Themes

  1. Evaluation and implementation of of programming languages.
  2. Tools for describing and analyzing languages, including syntax, semantics, and pragmatics.
  3. Tools to design new languages.
  4. Implementation of programming languages.

Course Objectives

  1. Be able to compare and evaluate different programming languages and implement different programming constructs and features (e.g. variables, loops, procedures, dynamic memory).
  2. Be able to formally specify the syntax and semantics of programming languages.
  3. Be able to write a translator to convert from one language to another.
  4. Be able to describe the semantics of and implement an interpreter and compiler for a simple programming language.


Assumes familiarity with the basics of logic (predicate calculus), recursion and induction, data structures, automata, and grammars. All students should be proficient with at least one object-oriented programming language (e.g. java, C++) - inheritance, polymorphism, and should have seen at least two different programming languages.

Course Discussion Groups

We will use BlackboardLearn for discussion and announcements. You should feel free to answer as well as ask question in the discussion forum as long as you are not providing an answer to a homework problem.

In addition to the official text book listed below, a variety of resources for different programming languages will be made available and should be consulted. Also all students must have access to the necessary compilers and interpreters for the different languages discussed. All required compilers/interpreters will be made available on the department of Computer Science computers. Many, if not all, are publicly available.

Academic Honesty

Students must abide by the University Academic Integrity policy and the Computer Science Academic Integrity Policy. All work must be your own. You may not copy code from any source, including from other students, nor may you show your code to other students.