CS 360
Winter 2016
Programming Language Concepts
CS 360-001 Tuesday/Thursday 15:30-16:50 (Rush 014)
CS 360-002 Tuesday/Thursday 14:00-15:20 (Rush 014)
CS 360-003 Tuesday 18:30-21:20 (University Crossings 153)

Geoffrey Mainland
Office: University Crossings 106
Office hours: Mondays 3pm–5pm; Thursdays 5pm–6pm.
Teaching Assistants:
Pavan Kantharaju
Matthew Roll
Warning! This material is for an old version of the course.

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 nontrivial language.


  1. CS 260 (Minimum Grade: D)
  2. CS 265 (Minimum Grade: D)
  3. CS 270 (Minimum Grade: D)


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.

Major Topics Covered in the Course

  1. Computation and Languages
  2. Syntax: Grammars and parsing
  3. Operational semantics and interpreters
  4. Data types and memory management
  5. Control structures and procedures
  6. Functional programming and lambda calculus
  7. Semantics: Scheme interpreter and denotational semantics
  8. Semantics: logic programming and query languages
  9. Axiomatic semantics

Course Objectives

  1. To understand context-free grammars and be able to translate an intuitive specification of a grammar into a precise representation.

  2. To understand recursive descent parsing, when it is applicable, and be able to write a recursive descent parser for a simple grammar.

  3. To understand the advantages and disadvantages of the major programming language paradigms. To gain basic understanding of object-oriented features such as class hierarchies, inheritance, polymorphism, and dynamic dispatch.

  4. To understand the major issues in the design of programming languages, such as static versus dynamic scoping, intricacies of strong versus weak typing.

  5. To implement an interpreter for a small but nontrivial language.


There is no required text.

For the first part of the course, we will use Structure and Interpretation of Computer Programs, which is available online. Readings will also be assigned from books that are electronically available from the Drexel library.

Course Communication

All course communication, including communication with course staff, will take place on Piazza. An invitation to join Piazza will be sent to your official Drexel address.

Piazza allows students to post anonymous questions and to communicate privately with course staff. Please use Piazza for all communication regarding CS 360.

Piazza is also for communicating with other students!

Grading policy

Grades will be weighted as follows:

Your current grade will always be available in Blackboard. The “Homework Total” column shows your current homework score as a percentage of possible points, and the “Weighted Course Grade” column shows your overall weighted course grade, which includes all homework assignments and exams.

Late work

All students have two late days, which may be used at any time to turn in homework late without penalty. After consuming all late days, the late penalty is 25% per day per homework. A student wishing to use a late day must notify the course staff immediately—late days will not be applied retroactively.

In the case of extenuating circumstances, please contact the instructor to make an appropriate arrangement.

Joining the course late

If you join the course late, you are still responsible for completing all work you may have missed and for completing all future assignments on time. You must contact the instructor immediately upon joining the course to arrange completion deadlines for any missed work. Failure to do so will result in a zero for all missed work.

“Curving” and letter grade calculation

Any course curve will be applied at the end of the term and will only serve to raise your grade.

Typically, a curve is applied to the midterm and/or final when the instructor deems the median score too low. It is extremely rare for a homework assignment to be curved, so you should count on your homework grades remaining uncurved.

The following scale will be used to convert (curved) percentage grades, i.e., the “Weighted Course Grade” column in Blackboard, to letter grades:

Points Grade Points Grade Points Grade
97-100 A+ 82-86.99 B 70-71.99 C-
92-96.99 A 80-81.99 B- 67-69.99 D+
90-91.99 A- 77-79.99 C+ 60-66.99 D
87-89.99 B+ 72-76.99 C 0-59.99 F


Assignments will be given approximately weekly.

All students must have an account on the Computer Science departmental server cluster, tux, to submit assignments. Students may sign up for an account here. All required software will be made available on the department cluster and via the course virtual machine.

Academic Honesty

Students must abide by the University Academic Integrity policy. All work must be your own. You may not copy code from any source, including from other students, nor may you show your code to other students.


This course follows university, college, and department policies, including but not limited to:

The instructor(s) may, at his/her/their discretion, change any part of the course before or during the term, including assignments, grade breakdowns, due dates, and schedule. Such changes will be communicated to students via the course web site. This web site should be checked regularly and frequently for such changes and announcements.