Programming Language (CS 550)
Announcments
Lectures
Programs
Course Resources
Assignments and Solutions
Grading Policy
- 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.
- Audience
-
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,
object-oriented
- 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
languages.
- Be able to write a parser and a scanner.
- Be able to write a translator to convert from one language to
another.
- 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
constructs
- Able to design new languages (little languages, interface
specifications, protocols)
- Prerequisites
-
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.
- Instructor
- Jeremy Johnson
Office: University Crossings 100C
phone:
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: R 4-6 (UC 100 and online) additional hours by appointment.
- TA
- Kevin Lynch
Office: University Crossings 147
phone:
e-mail: kml33 AT drexel DOT edu
office hours: M 8-9 and T 8-9 (online).
- Meeting Time
- Thursday 6:30-9:30 in Univ. Crossings 153 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.
-
Textbook
-
Michael L. Scott, Programming Language Pragmatics, 3rd Ed., Morgan Kaufmann Publishers, 2009.
- 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.
Topics
- Week 1: Functional Programming (ch. 10 and SICP)
- Week 2: Lambda Calculus (ch. 10)
- Week 3: Object Oriented Programming (ch. 9 and SICP)
- Week 4: Logic Programming and Query Languages (ch. 11 and SICP)
- Week 5: Parsing and Grammars (ch. 2)
- Week 5: Midterm
- Week 6: Mini Language Interpreter (ch. 4)
- Week 7: Scanner and Parser Generation (ch. 2)
- Week 8: Mini Language Compiler (ch. 14)
- Week 9: Compiler Optimization (ch. 14)
- Week 10: Data Types (ch. 7)
Grading
- Homework and participation (70%)
- Midterm (15%)
- Final Exam (15%)
Assignments 4,
5 and
6 will be done in groups.
Students will be assigned to groups before Assignment 4 (4 students each -
members may come from either the in class or online sections).
Peer grading will be used for group participation and discussion groups
will be set up in BbVista for each group and all members are expected to
participate in the discussions and contribute to every assignment.
Resources
-
Reference Books
- John R. Levine,
flex & bison,
O'Reilly & Associates. An
online copy of this book is available through Drexel's library
(safari). This is a rewrite of the older book on Lex and Yacc by
Levine, Mason, and Brown.
- 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
(safari).
- Alfred V. Aho and Jeffrey D. Ullman,
Foundations of Computer Science - C Edition,
W. H. Freeman and Company, 1995.
- Kenneth Louden, Programming Languages: Principles and Practice, 2nd Ed., Thomson Brooks/Cole, 2003.
- list reference books here.
-
Web Pages
- Ken Louden's Web resources for hist 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.
- scheme
- MIT/GNU Scheme
- Lambda Calculus Tutorial
from Chris Barker at NYU.
Look Here for Important Announcements
Announcements
(Last updated Sun. Mar. 21)
Lectures
This list is tentative and may be modified at the instructor's discretion.
- Lecture 1: Introduction to List Processing and Functional Programming in Scheme (ch. 10 of the text and ch. 3 and 4.1-3 of SICP)
- Lecture 2: Functional Programming and Operational Semantics of Scheme (ch. 10 of the text and ch. 3 and 4.1-3 of SICP)
- Lecture 3: Lambda Calculus (ch. 10)
- Lecture 4: Logic Programming and a Simple Query Language (ch. 11 [logic programming] and ch. 4 of SICP [query language])
- Lecture 5: Mini Language Interpreter (ch. 11 [logic programming] and ch. 4 [semantic analysis])
- Lecture 6: Grammars and Parsing (ch. 2 [Programming Language Syntax] and ch. 4 [semantic analysis])
- Lecture 7: Dynamic Memory Allocation and Garbage Collection (ch. 3 sec. 2 [Object lifetime and storage management] and ch. 7 sec. 7-8 [Pointers and recursive types and Lists])
- Lecture 8: Mini Language Compiler (ch. [])
- Lecture 9: Scanner and Parser Generation (ch. 2 [Programming Language Syntax] and ch. 4 [semantic analysis])
- Lecture 10: Object Oriented Programming and Implementation (ch. 9)
Programs and Worksheets
Assignments
- Scheme Practice Assignment (not to be handed in)
- Assignment 1 (operational
semantics of scheme) - due Wed. April 25 at 9am [individual - submit through BbVista].
- Assignment 2 (lambda
calculus) - due Wed. May 2 at 9am [individual - submit through BbVista].
- Assignment 3 (logic
programming) - due Wed. May 16 at 9am [individual - submit through BbVista].
- Midterm Exam
available Thur. May 3 (10 pm) through by Thur. May 10 at 9:00am [individual take home exam with 5 hour time limit - submit through BbVista].
- Assignment 4 (mini
language interpreter with list processing) - due Sun. May 27 at 9am [group - submit through BbVista].
- Assignment 5 (mini language compiler version 1) - due Sun. June 3 at 9am [group - submit through BbVista].
- Assignment 6 (mini
language compiler version 2) - due Wed. June 6 at 9am [group - submit through BbVista].
- Extra Credit Assignment 1 (functional mini language interpreter) - due Wed. June 13 at 9am [individual - submit through BbVista].
- Extra Credit Assignment 2 (object oriented mini language interpreter) - due Wed. June 13 at 9am [individual - submit through BbVista].
- Peer Evaluation
due by Sunday June 10 at 9:00am [individual evaluation of group - submit through BbVista].
- Final Exam
due by Thur. June 14 at 9:30pm [individual take home - submit through BbVista].
Solutions
- Available for the class only through BbVista.
Created: 3/30/07 [last updated 4/5/12] by jjohnson AT cs DOT drexel DOT edu