CS 360
Winter 2015
Programming Language Concepts
Tuesdays, Thursdays 14:00-15:20
University Crossings 151

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

Course Description

Introduces the design and implementation of modern programming languages: formal theory underlying language implementation; concerns in naming, binding, storage allocation and typing; semantics of expressions and operators, control flow, and subprograms; procedural and data abstraction; functional, logic, and object-oriented languages. Students will construct an interpreter for a nontrivial language.


  1. CS 260 (Minimum Grade: D)
  2. CS 265 (Minimum Grade: D)
  3. CS 270 (Minimum Grade: D)


This is a required by all Computer Science students. Normally it is taken in the pre-junior year. 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, Software Engineering, etc.

Major Topics Covered in the Course

  1. Computation and Languages
  2. Syntax: Grammars and parsing
  3. Operational semantics and interpreters
  4. Data types and memory management
  5. Control structures and procedures
  6. Functional programming and lambda calculus
  7. Semantics: Scheme interpreter and denotational semantics
  8. Semantics: logic programming and query languages
  9. Axiomatic semantics

Course Objectives

  1. To understand context-free grammars and be able to translate an intuitive specification of a grammar into a precise representation.

  2. To understand recursive descent parsing, when it is applicable, and be able to write a recursive descent parser for a simple grammar.

  3. To understand the advantages and disadvantages of the major programming language paradigms. To gain basic understanding of object-oriented features such as class hierarchies, inheritance, polymorphism, and dynamic dispatch.

  4. To understand the major issues in the design of programming languages, such as static versus dynamic scoping, intricacies of strong versus weak typing.

  5. To implement an interpreter for a small but nontrivial language.

Laboratory projects

There are four programming assignments, where students write a scanner and parser, implement a translator, implement and interpreter, and experiment with different programming paradigms (e.g. functional and logic). Each assignment takes two weeks.


The text for the course is Kenneth C. Louden, Programming Languages: Principles and Practice, 3rd Edition, Course Technology. ISBN: 9781111529413.

We will also use Structure and Interpretation of Computer Programs, which is available online.

In addition to the official text book listed above, a variety of resources for different programming languages will be made available and should be consulted. All students must have access to the necessary compilers and interpreters for the different languages discussed, which will be made available on the department of Computing computers. All required software is also publicly available.

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. A student wishing to use a late day must notify the course staff immediately—late days will not be applied retroactively.

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

If you join the course late, you are still responsible for completing all work you may have missed and for completing all future assignments on time. You must contact me within one week of joining the course to arrange completion deadlines for any missed work. Failure to do so will result in a zero for all missed work.

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. You may not post code for solving homwework problems on BlackboardLearn, even if the code is incomplete. If you are unsure whether or not a post is appropriate, contact the course staff via email.

Academic Honesty

Students must abide by the University 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.


This course follows university, college, and department policies, including but not limited to:

The instructor(s) may, at his/her/their discretion, change any part of the course before or during the term, including assignments, grade breakdowns, due dates, and schedule. Such changes will be communicated to students via the course web site. This web site should be checked regularly and frequently for such changes and announcements.