Programming Language Concepts (CS 360)

 Announcments  Lectures  Programs  Course Resources   Assignments and Solutions  Grading Policy
Course Description
Introduces the design and implementation of modern programming languages: formal theory underlying language implementation; concerns in naming, binding, storage allocation and typing; semantics of expressions and operators, control flow, and subprograms; procedural and data abstraction; functional, logic, and object-oriented languages. Students will construct an interpreter for a non-trivial language.
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.).
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 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.
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)
Undergraduate data structures course (CS 260)
Courses in logic (e.g. CS 270 or ECE 200) and (e.g. CS 281) Computer Architecture would be helpful but are not required. All students should be comfortable with at least one object-oriented programming language (e.g. java, C++), and it would be helpful to have seen at least two different languages.
Jeremy Johnson
Office: University Crossings 100C
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: T 1-2, R 5-6, additoinal hours by appointment.
Xu Xu
Office: University Crossings 147
e-mail: xx27 AT drexel DOT edu
office hours: M 4-6, additoinal hours by appointment.
Meeting Time
sec. 1 TR 11-12:20 in UC 153 and sec. 2 TR 3:30-4:50 in Lebow 134
Course Mailing List
cs360 AT cs DOT drexel DOT edu

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.


  1. Week 1: Overview: Computation and Languages (ch. 1)
  2. Week 2: Syntax: Grammars and Parsing (ch. 3)
  3. Week 3: Operational Semantics (ch. 5, 13)
  4. Week 4: Interpreters: Assignment and Control Structures (ch. 5, 6, 13)
  5. Week 5: Procedures (ch. 8)
  6. Week 6: Functional Programming (ch. 11)
  7. Week 7: Functional Programming and Lambda Calculus (ch. 11)
  8. Week 8: Semantics: Scheme interpreter and Denotational Semantics (ch. 13 and SICP)
  9. Week 9: Logic Programming and Query Languages (ch. 12 and SICP)
  10. Week 10: Axiomatic Semantics (ch. 13)


  1. Homework assignments (60%) - 4 at 15% each
  2. Midterm (20%)
  3. Final Exam (20%)
Grades will be determined from a weighted average using the above distribution. A curve with the average set to a B will be used, provided the class does sufficiently well that the average score exhibits a solid understanding of the material.

Assignments and exams will be returned on a regular basis to provide feedback to students. All students must do their own work (no sharing of code unless specifically indicated). Any violation of this will result in a zero grade for the assignment with more severe penalties, including an F for the course, for repeat offenders . A second violation will be reported to the University Judicial process F for the course. See Universities Academic Honesty Policy


Reference Books
  1. 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).
  2. Alfred V. Aho and Jeffrey D. Ullman, Foundations of Computer Science - C Edition, W. H. Freeman and Company, 1995.
  3. list reference books here.
Web Pages
  1. Ken Louden's Web resources for the 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

Look Here for Important Announcements

Announcements (Last updated Feb. 5 at 1:50pm)


This list is tentative and may be modified at the instructor's discretion.
  1. Week 1 (Overview and Computation and Languages - ch. 3)
  2. Week 2 (Overview and Computation and Languages - ch. 4)
  3. Week 3: Operational Semantics and Interpreters (ch. 5, 13)
  4. Week 4: Interpreters - Assignment and Control Structures (ch. 5, 6, 13.1-2)
  5. Week 5: Procedures (ch. 7, 13)
  6. Week 6: Midterm (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)
  11. Week 11: Final Exam

Programs and Worksheets



Created: 1/8/06 by jjohnson AT cs DOT drexel DOT edu