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
  1. Evaluation and implementation of 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
  5. Implementation of programming languages
Course 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 and semantics 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 and compiler for a simple programming language.
  6. Be comfortable with the major programming paradigms and be able to use at least one language from each paradigm.
Course 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
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: W 1-2 and T 8-9 (online), additional hours by appointment.
TA
Kurt Schmidt
Office: University Crossings 105
phone:
e-mail: AT drexel DOT edu
office hours: R 5-6 and M 8-9 (online).
Meeting Time
Thursday 6-9:00 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


Topics

  1. Week 1: Parsing and Grammars (ch. 2)
  2. Week 2: Mini Language Interpreter (ch. 4)
  3. Week 3: List Processing, Memory Management, Garbage Collection (ch. 3 sec. 2 and 7 sec. 7-8)
  4. Week 4: Scanner and Parser Generation (ch. 2)
  5. Week 5: Mini Language Compiler (ch. 14)
  6. Week 5: Midterm
  7. Week 6: Functional Programming (ch. 10 and SICP)
  8. Week 7: Object Oriented Programming (ch. 9 and SICP)
  9. Week 8: Logic Programming and Query Languages (ch. 11 and SICP)
  10. Week 9: Lambda Calculus (ch. 10)
  11. Week 10: Programming Language Semantics


Grading

  1. Homework and participation (50%)
  2. Midterm (25%)
  3. Final Exam (25%)
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.


Resources

Reference Books
  1. 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.
  2. 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).
  3. Alfred V. Aho and Jeffrey D. Ullman, Foundations of Computer Science - C Edition, W. H. Freeman and Company, 1995.
  4. Kenneth Louden, Programming Languages: Principles and Practice, 2nd Ed., Thomson Brooks/Cole, 2003.
  5. list reference books here.
Web Pages
  1. Ken Louden's Web resources for hist text Programming Languages.
  2. [SICP] Abelson and Sussman, Structure and Interepretation of Computer Programs.
  3. Graphviz - Graph Visualization Software.
  4. CUP Reference Manula - Parser generator for Java.
  5. PLY - Python Lex-Yacc.
  6. scheme
  7. MIT/GNU Scheme
  8. 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.
  1. Lecture 1: Grammars and Parsing (ch. 2 of the text)
  2. Lecture 2: Mini Language Interpreter (ch. 4 of the text)
  3. Lecture 3: Dynamic Memory Management and Garbage Collection (ch. 3 sec. 2 and ch. 7 sec. 7-8 of the text)
  4. Lecture 4: Scanner and Parser Generators (ch. 2 of text)
  5. Lecture 5: Mini Language Compiler (ch. 5, 14 and 16 of text)
  6. Lecture 6: Functional Programming and Operational Semantics of Scheme (ch. 10 of the text and ch. 3 and 4.1-3 of SICP)
  7. Lecture 7: Object Oriented Programming and Implementation (ch. 9)
  8. Lecture 8: Logic Programming and a Simple Query Language (ch. 11 [logic programming] and ch. 4 of SICP [query language])
  9. Lecture 9: Lambda Calculus (ch. 10)
  10. Lecture 9: Programming Language Semantics


Programs and Worksheets


Assignments

Solutions

 
Created: 3/30/07 [last updated 6/3/11] by jjohnson AT cs DOT drexel DOT edu