CS 360
Winter 2017
Programming Language Concepts
CS 360-001 Tuesday/Thursday 15:30-16:50 (Rush 9)
CS 360-002 Tuesday/Thursday 14:00-15:20 (Rush 9)
CS 360-003 Tuesday 18:30-21:20 (Science Center 326, 3401 Market)

 Instructor: Geoffrey Mainland mainland+cs360@drexel.edu Office: University Crossings 106 Office hours: Mondays 4pm–7pm; Thursdays 5pm–6pm. Teaching Assistant: Xiao Han CLC office hours: Monday 2pm–4pm; Friday 3pm–5pm
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.

## Prerequisites

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

## 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.

## 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.

## Textbook

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!

Grades will be weighted as follows:

• Homework and participation (60%)
• Midterm (20%)
• Final Exam (cumulative) (20%)

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.

### 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:

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

Assignments will be given approximately weekly. All assignments will be submitted via GitHub.

All students must have an account on the Computer Science departmental server cluster, tux. 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.