Instructor:
Office:
Email: (the best way to get hold of me)
Phone:
Course Webpage:
Office Hours:

Teaching Assistant:


Course:

Description
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 publically available.
Audience
This is a required by all Computer Science students. Normally it is taken in the pre-junior year. 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, Software Engineering, etc.).
Themes
  1. Evaluation and implementation of programming languages
  2. Tools for describing and analyzing languages, including syntax, semantics, and pragmatics
  3. Tools to design new languages
  4. Programming Paradigms (imperative, functional, logic, object-oriented)
Objectives:
  1. Be able to compare and evaluate different programming languages and implement different programming constructs and features (e.g. variables, loops, procedures, dynamic memory).
  2. Be able to formally specify the syntax of programming languages.
  3. Be able to write a parser and a scanner.
  4. Be able to write a translator to convert from one language to another.
  5. Be able to describe the semantics of and implement an interpreter for a programming language.
  6. Be comfortable with the major programming paradigms and be able to use at least one language from each paradigm.
Benefits:
  1. Easier to express algorithmic ideas
  2. Better able to formally express concepts
  3. Improved ability to select appropriate languages
  4. Easier to learn new languages
  5. Understand the significance and impact of language choices and constructs
  6. Able to design new languages (little languages, interface specifications, protocols)

Prerequisites:


Course Requirements and Grading:

Last date to withdraw with a "W" grade:


Texts

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 publically available.


Topics

  1. Week 1: Overview: Computation and Languages (ch. 1)
  2. Week 2: Syntax: Grammars and Parsing (ch. 3)
  3. Week 3: Parser Generators and Attribute Grammars (ch. 5, 13)
  4. Week 4: Interpreters - Assignment and Control Structures (ch. 5, 6, 13.1-2)
  5. Week 5: Procedures (ch. 8)
  6. Week 6: Midterm / Functional Programming (ch. 11)
  7. Week 7: Functional Programming and Lambda Calculus (ch. 11)
  8. Week 8: Dynamic Memory Allocation (ch. 8, 11, and SICP)
  9. Week 9: Semantics of Functional Programs (ch. 11, 13, and SICP)
  10. Week 10: Query Languages and Logic Programming (ch. 12)

Exams


Assignments

There will be 4 assignments throughout the term. You are encouraged to look at the problems suggested in each lecture.

Any programs must run (and will be graded on) the tux cluster, the CS Dept. machines: tux.cs.drexel.edu .

Submission

Electronic work will be submitted via the submit_* scripts, or the hwrun script.

Under no circumstance will you email work to me or the TAs. It will be deleted, unread, and with prejudice.



Misc