Programming Language (CS 550)
Assignments and Solutions
- 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
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
- Evaluation and implementation of of programming languages
- Tools for describing and analyzing languages, including syntax,
semantics, and pragmatics
- Tools to design new languages
- Programming Paradigms (imperative, functional, logic,
- Implementation of programming languages
- Course Objectives
- Be able to compare and evaluate different programming languages and
implement different programming constructs and features
(e.g. variables, loops, procedures, dynamic memory).
- Be able to formally specify the syntax and semantics of programming
- Be able to write a parser and a scanner.
- Be able to write a translator to convert from one language to
- Be able to describe the semantics of and implement an interpreter and
compiler for a simple programming language.
- Be comfortable with the major programming paradigms and be able to use
at least one language from each paradigm.
- Course Benefits
- Easier to express algorithmic ideas
- Better able to formally express concepts
- Improved ability to select appropriate languages
- Easier to learn new languages
- Understand the significance and impact of language choices and
- Able to design new languages (little languages, interface
Assumes familiarity with the basics of logic (predicate calculus),
recursion and induction, automata, and grammars. All students should
be proficient with at least one object-oriented programming language
(e.g. java, C++), and it would be helpful to have seen at least two different
- Jeremy Johnson
Office: University Crossings 100C
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: TR 11-12 and online T 7-8, additional hours by appointment.
- Kanwarpreet Sethi
Office: University Crossings 147
e-mail: AT drexel DOT edu
office hours: M online (?) and R 12-2, additional hours by appointment.
- Meeting Time
- Thursday 6-9:00 in Korman 102a and online.
The online and in class versions
of the course will be identical (in class lectures will be recorded and posted
on webct and use of online discussions will be required by everyone).
- Course Discussion Groups
- BbVista will be used for class discussion and announcements - check regularly
Please use this list for questions and discussions related to the course.
If you know the answer to someone's question, please feel free to jump in,
as long as well it is not an answer to a homework problem. I will moderate
the list so that frivolous mail and spam is not forwarded.
Kennet C. Louden, Programming Languages: Principles and Practice, 2nd Ed., Thomson Brooks/Cole, 2003.
- 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 publicaly available.
- Week 1: Parsing and Grammars (ch. 4)
- Week 2: Mini Language Interpreter (ch. 5)
- Week 3: List Processing, Memory Management,
Garbage Collection (ch. 7)
- Week 4: Functional Programming (ch. 11 and SICP)
- Week 5: Midterm
- Week 6: Mini Language Compiler (ch. 5 and 13)
- Week 7: Logic Programming and Query Languages (ch. 12 and SICP)
- Week 8: Lambda Calculus, Environments, and a Scheme Interpreter
(ch. 11 and SICP)
- Week 9: Type checking and ML (ch. 6 and 11)
- Week 10: Formal Semantics (ch. 13)
Students will be assigned to groups (4 students each - members may come
from either the in class or online sections). Each group
will be responsible for weekly homework (8 total), and each member
will take the lead on two of the assignments. Peer grading will be
used for group participation and discussion groups will be set up
in webct for each group and all members are expected to participate
in the discussions and contribute to every assignment. Doing all of
the assignments will be essential for the exams.
- Homework and participation (50%)
- Midterm (25%)
- Final Exam (25%)
- John R. Levine, Tony Mason, Doug Brown,
Lex & Yacc,
2nd/updated edition (October 1992), O'Reilly & Associates. An
online copy of this book is available through Drexel's library
- Alfred V. Aho and Jeffrey D. Ullman,
Foundations of Computer Science - C Edition,
W. H. Freeman and Company, 1995.
- list reference books here.
- Ken Louden's Web resources for the text Programming Languages.
- [SICP] Abelson and Sussman, Structure and Interepretation of Computer Programs.
- Graphviz - Graph Visualization Software.
- CUP Reference Manula - Parser generator for Java.
- PLY - Python Lex-Yacc.
- MIT/GNU Scheme
- Lambda Calculus Tutorial
from Chris Barker at NYU.
(Last updated Wed. April 4)
Look Here for Important Announcements
This list is tentative and may be modified at the instructor's discretion.
- Lecture 1: Grammars and Parsing (ch. 4 of the text)
- Lecture 2: Mini Language Interpreter (ch. 5, 7, and 8 of the text)
- Lecture 3: Dynamic Memory Management and Garbage Collection (ch. 5.7, 8.5, and 11.1-3 of the text)
- Lecture 4: Functional Programming and Operational Semantics of Scheme (ch. 11 of the text and ch. 3 and 4.1-3 of SICP)
- Lecture 5: Object Oriented Programming and Implementation (ch. 6, 9, and 10)
- Lecture 6: Mini Language Compiler (ch. 5.1-5, 7.1-3, 8.1-4)
- Lecture 7: Operational Semantics of scheme using Substitution (ch. 11 [lambda calculus] and ch. 3 of SICP [streams])
- Lecture 8: Logic Programming and a Simple Query Language (ch. 12 [logic programming] and ch. 4 of SICP [query language])
- Lecture 9: Programming Language Semantics (ch. 13)
Programs and Worksheets
- Assignment 1 - parsing,
parser generators, and recursive data structures (due Mon. April 13 at midnight).
- Assignment 2 - extending
the mini language to support lists (due Mon. April 20 at midnight).
- Assignment 3 - dynamic
memory allocation and garbage collection (due Mon. April 27 at midnight).
- Midterm Exam - Thur April 29 through Wed. May 6
- Assignment 4 - support for
functional programming (due Sat. May 16 at midnight).
- Assignment 5 - support
for objects (due Sat. May 23 at midnight).
- Assignment 6 - mini
language compiler (due Sat. May 30 at midnight).
- Assignment 7 - mini language compiler version 2 (due Wed. June 3 at midnight).
- Extra Credit Assignment - mini language compiler version 2 (due Wed. June 3 at midnight).
- Final Exam - Thur. June 4 through Thur. June 11.
Created: 3/30/07 [last updated 4/2/09] by jjohnson AT cs DOT drexel DOT edu
- Available for the class only through webct.