CS245: Principles of Programming Languages, Bryn Mawr College

Douglas Blank
Fall 2012


An introduction to a wide range of topics relating to programming languages with an emphasis on abstraction and design. Design issues relevant to the implementation of programming languages are discussed, including a review and in-depth treatment of mechanisms for sequence control, the run-time structure of programming languages and programming in the large. The course has a strong lab component where students get to construct large programs in at least three different imperative programming languages.

General Information

Instructor: Douglas Blank, 248 Park Science Building, 526-6501
Email: dblank (at) cs (dot) brynmawr (dot) edu
Web: cs.brynmawr.edu/~dblank
Office hours: Monday and Wednesday, 2pm to 3pm
Lectures: Tues and Thursdays 9:45am - 11:15pm, Room: Park Science 337
Lab: T/R 2:15pm - 3:15pm. Park Science Building, room 231
Lab Assistants: None
Gradebook: Moodle


The Scheme Programming Language, R. Kent Dybvig. Third Edition, 2003. MIT Press.
Essentials of Programming Languages, Daniel P. Friedman and Mitch Wand. Third Edition, 2008. MIT Press.
The Little Schemer, Daniel P. Friedman and Matthias Felleisen. Fourth Edition, 1995. MIT Press.


We will use two versions of Scheme: Petite Scheme, a freely available version of Chez Scheme; Calico Scheme, also freely available. These are all available on the Computer Science Linux machines and available for download. You will get a CS account if you don't have one already.


To work on Petite Scheme code in emacs:
  1. mkdir .emacs.d
  2. cd .emacs.d
  3. emacs init.el
  4. Add the lines to init.el:
    (add-to-list 'load-path "~/.emacs.d")
    (autoload 'scheme-mode "iuscheme" "Major mode for Scheme." t)
    (autoload 'run-scheme "iuscheme" "Switch to interactive Scheme buffer." t)
    (setq auto-mode-alist (cons '("\\.ss" . scheme-mode) auto-mode-alist))
    (custom-set-variables '(scheme-program-name "petite"))
  5. Save the file iuscheme.el to the .emacs.d directory.
  6. Now you will have the commands "M-x run-scheme" and .ss files will envoke scheme mode.


Week Dates (Tue, Thu) Topics Readings Assignment
1 09/04/2012, 09/06/2012
  1. Why Programming Languages?
  2. Overview/Review of Python
  3. Scheme Syntax
  4. Using Petite Scheme
  5. Using Calico Scheme
For next week:
  • Read The Little Schemer: chapters 1 and 2
  • Read The Scheme Programming Language: chapters 1 and 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, and 2.7.
Assignment #1: Review of Python, Introduction to Calico, Using Python and Scheme (due Tuesday 09/11/2012)
2 09/11/2012, 09/13/2012
  1. Scheme syntax and semantics
  2. Recursion
For next week:
  • Read The Little Schemer: chapters 3 and 4
  • Read The Scheme Programming Language: chapter 2.8, 2.9, and 3.
Assignment #2: Learning Scheme (due Tuesday 09/18/2012)
3 09/18/2012, 09/20/2012 Simple Programming Languages For next week: Read about the history of your language and relatives; Calico language development Assignment #3: Create/Refine a Language (due Tuesday 09/25/2012)
4 09/25/2012, 09/27/2012 Present your Language; Scheme and Interpreters For next week: Read EOPL, chapter 1 Assignment #4: EOPL Chapter 1(due Tuesday 10/02/2012)
5 10/02/2012, 10/04/2012 Slides: Interpretering a Language For next week: Study for midterm Assignment #5: EOPL Chapter 2: parse, unparse, and occurs-free? (due Tuesday 10/09/2012). Video: Calico Scheme Debugging Hints
6 10/09/2012, 10/11/2012 Tuesday Review. Thursday: Midterm For next meeting (two weeks): Read Project Proposal ideas Assignment #6: Project Proposals ideas
7 10/16/2012, 10/18/2012 Fall Break! Eat, rest, relax.
8 10/23/2012, 10/25/2012 Calculator Language: Expressions, Parsing, Evaluator, Functions, and Variables For next week: Read EOPL Chapter 3.3 Assignment #7: Calculator Language (due Tuesday 10/30/2012)
9 10/30/2012, 11/01/2012 Parsing and Evaluating, Calculator Language, Part 2 For next week: Read EOPL Chapter 3.4 - 3.7 Assignment #8: Calculator Language, Part 2(due Tuesday 11/13/2012)
10 11/06/2012, 11/08/2012 Lexical Scope, and Recursion, and Continuations For next week: Read EOPL 5.1, and 6.1
11 11/13/2012, 11/15/2012 Continuations, continued. Discussions Discuss EOPL 5.1 and 6.1 Assignment #9: Continuations
12 11/20/2012, No Class on Thursday Thanksgiving Break! Read The Role of the Study of Programming Languages in the Education of a Programmer, by Dan Friedman
13 11/27/2012, 11/29/2012 Scope and Functional Programming Pair Programming Challenge Work on Project
14 12/04/2012, 12/06/2012 Scheme Streams, and Review Work on Project
15 12/11/2012, 12/13/2012 Presentations Work on Project

Other dates of interest:


Final grades will be calculated as a weighted average of all grades according to the following weights:

Midterm Exam: 25%
Final Exam: 25%
Labs: 25%
Project: 25%

dblank (at) cs (dot) brynmawr (dot) edu