Programming Language (CS 550)

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.

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.

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: Parsing and Grammars (ch. 2)

Week 2: Scanner and Parser Generation (ch. 2)

Week 3: Attribute Grammars and Mini Language Interpreter (ch. 4)

Week 4: Mini Language Compiler (ch. 14)

Week 5: Compiler Optimization (ch. 14)

Week 6: Functional Programming (ch. 10 and SICP)

Week 7: Logic Programming and Query Languages (ch. 11 and SICP)

Week 8: Object Oriented Programming (ch. 9 and SICP)

Week 9: Lambda Calculus (ch. 10)

Week 10: Data Types (ch. 7)

Grading

Homework and participation (70%)

Midterm (15%)

Final Exam (15%)

Assignments 2,
3,
4,
and
6 will be done in groups.
Students will be assigned to groups before Assignment 2 (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 BbLearnfor 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.