Course Description

The main topics of this course include a comparative study of programming language features, an introduction to programming language design and implementation, and an introduction to the theory of formal languages.

The course objectives are


Related Courses


These slides are still work in progress. For the time being, I'll keep the slides from earlier iterations of this course online. These slides will be replaced with the ones I'm using this time around as I get them ready.

TopicApproximate Dates
IntroductionJan 7
Types of programming languagesJan 9, 11, 28
Introduction to SchemeJan 14–21
Introduction to PrologJan 23, 25
Lexical analysis and regular languagesJan 30, Feb 4–8
Syntactic analysis and context-free languagesFeb 11–Mar 8
Semantic analysisMar 11, 13
Names, scopes, and bindingMar 18, 20
Control flowMar 22, 25
Subroutines and control abstractionsMar 27, 29
Data typesApr 1, 3
Object orientationApr 5, 8
Introduction to HaskellNot covered

Textbooks and Online Resources

Required Textbook

Michael L. Scott. Programming Language Pragmatics. 3rd edition, Morgan Kaufmann, 2009.

Recommended Reading

H. Abelson, G.J. Sussman, and J. Sussman. Structure and Interpretation of Computer Programs. 2nd edition, MIT Press, 1996.

John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman. Introduction to Automata Theory, Languages, and Computation. 3rd edition, Addison Wesley, 2006.

Allen B. Tucker and Robert E. Noonan. Programming Languages: Principles and Paradigms. 2nd edition, McGraw-Hill, 2007.

Robert W. Sebesta. Concepts of Programming Languages. 7th edition, Addison Wesley, 2005.

A. Appel. Modern Compiler Implementation in Java. Cambridge University Press, 1998.

Kenneth Slonneger and Barry L. Kurz. Formal Syntax and Semantics of Programming Languages. Addison Wesley, 1995.

H. Abelson and G. Sussman. Structure and Interpretation of Computer Programs. 2nd edition, MIT Press, 1996.

B. Meyer. Object-Oriented Software Construction. 2nd edition, Prentice Hall, 1997.

Leslie B. Wilson and Robert G. Clark. Comparative Programming Languages. 3rd edition, Addison Wesley, 2001.

Terrence W. Pratt and Marvin V. Zelkowski. Programming Languages Design and Implementation. 4th edition, Prenticel Hall, 2000.

Resources on Scheme, Prolog, and Haskell


R.K. Dybvig. The Scheme Programming Language: Comprehensive book on Scheme

Yet Another Scheme Tutorial: A brief and sweet tutorial on Scheme

D.P. Friedman and M. Felleisen. The Little Schemer: Fun read on Scheme by two of the biggest names in the Scheme world.


Learn Prolog Now!: A short introduction to Prolog

The Power of Prolog: Another short introduction to Prolog, including constraint programming (by the author of SWI Prolog's constraint programming engine)

SWI Prolog Manual


Learn You a Haskell: An introduction to Haskell for people who can program but haven't programmed functionally before.

Real-World Haskell: An excellent introduction to Haskell that covers basic and intermediate concepts

Hoogle: Search interface for the documentation of standard Haskell packages and packages on Hackage

GHC Documentation: Documentation of the GHC Haskell compiler

Haskell Stack: A simple environment to get GHC up and running on your machine

Haskell Stack User Guide

Hackage: Standard repository of a large number of high-quality Haskell packages


Grade = max(40% * A + 20% * M + 40% * F, 40% * A + 60% * F)



I encourage you to form groups of up to 3 students who collaborate on assignments. Each group submits a single assignment; each member of the group receives the same marks. It is your responsibility to find students with whom you form a group. Group composition may change between assignments. No collaboration between groups is allowed on assignments.

Late Assignments

Late assignments are accepted only if you were sick on the day the assignment was due or if there is an important event in your personal life that prevents you from completing the assignment on time. In the latter case, you must discuss these circumstances with me in advance to apply for a reasonable extension.

Missed Exams

If you miss an exam, you will be given the opportunity to sit the exam at a later date. You must, however, present a good reason why you were not able to sit the exam at the regular scheduled time. Also, unless there are a large number of students who missed the regularly scheduled exam, make-up exams are oral exams.


I will not tolerate any form of plagiarism (copying from your classmates, copying solutions from the web, etc.). According to university regulations, I have to report you to the Faculty's Integrity Officer if I suspect you of academic dishonesty, and I will. The Integrity Officer may refer your case to the Senate Committee on Plagiarism. The penalty for plagiarism can range from failing the course to expulsion from the university. So please save me and yourself the aggravation. For more information, make sure you read the Dalhousie Academic Integrity Page.