CS 360, Programming Language Concepts, Summer 2015

Instructor: Krzysztof Nowak
Office: University Crossings 109
Office Hours: MWF 11:00 am - 11:50 am
e-mail: kn33@drexel.edu

Section 002: Tuesday, Thursday 2:00 pm - 3:20 pm, PISB 108

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, storage management. Emphasizes language features and implementation, not mastery of any particular languages.

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.

Required Text
Kenneth C. Louden & Kenneth A. Lambert, Programming Languages, Principles and Practice, 3rd Edition, Cengage Learning, 2012 (errata)

Reference Texts
Harold Abelson, Gerald J. Sussman, Julie Sussman, Structure and Interpretation of Computer Programs, 2nd Edition, MIT Press, 1996, available online as an html file:
http://mitpress.mit.edu/sicp/full-text/book/book.html
Alfred V. Aho, Jeffrey D. Ullman, Foundations of Computer Science, C Edition, Computer Science Press, 1995, available online as downloadable pdf files:
http://infolab.stanford.edu/~ullman/focs.html
Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman, Compilers: Principles, Techniques, and Tools, 2nd Edition, Pearson Education, 2006
Michael L. Scott, Programming Language Pragmatics, 3rd Edition, Morgan Kaufmann Publishers, 2009
Michael Sipser, Introduction to the Theory of Computation, 3rd Edition, Cengage Learning, 2013

Syllabus
Week 1:
Chapters 1-2, 3.1-3.2, Turing machines basics
Week 2:
Quiz 1 on Tuesday, HW 1 due in class on Thursday, Lab 1 on Thursday (Scheme), Chapters 3.3-3.4
Week 3: HW 2 due in class on Tuesday, Quiz 2 on Tuesday, Lab 2 on Thursday (Scheme & ML), Chapters 3.5-3.6, Lambda-calculus basics
Week 4: HW 3 due in class on Tuesday, Test 1 on Tuesday, Chapters 4.1-4.3, Modelling state with assignment and streams (SICP I)
Week 5:
HW 4 due in class on Tuesday, Quiz 3 on Tuesday, PA 1 due Wednesday midnight, Lab 3 on Thursday (Scheme & Haskell), Chapters 4.4-4.6
Week 6:
HW 5 due in class on Tuesday, Quiz 4 on Tuesday, Lab 4 on Thursday (Prolog), Chapters 6.1-6.4
Week 7:
HW 6 due in class on Tuesday, Quiz 5 on Tuesday, PA 2 due Wednesday midnight, Chapters 6.5-6.8
Week 8:
HW 7 due in class on Tuesday, Test 2 on Tuesday, Chapters 7.1-7.5, Scheme interpreter (SICP II)
Week 9: HW 8 due in class on Tuesday, Quiz 6 on Tuesday, PA 3 due Wednesday midnight, Lab 5 on Thursday, Chapters 9.1-9.3, 10.1-10.4
Week 10: HW 9 due in class on Tuesday, Quiz 7 on Tuesday, Lab 6 on Thursday, Chapters 12.1-12.2, A query language (SICP III)
Week 11: PA 4 due Wednesday midnight, final exam

Course Themes
Evaluation and implementation of of programming languages
Tools for describing and analyzing languages, including syntax, semantics, and pragmatics
Tools to design new languages
Programming Paradigms (imperative, functional, logic, object-oriented)

Course Objectives
Be able to compare and evaluate different programming languages and implement different programming constructs and features (e.g. variables, loops, procedures, dynamic memory).
Be able to formally specify the syntax and semantics of programming languages.
Be able to write a parser and a scanner.
Be able to write a translator to convert from one language to another.
Be able to describe the semantics of and implement an interpreter and compiler for a simple programming language.
Be comfortable with the major programming paradigms and be able to use at least one language from each paradigm.

Course Benefits
Easier to express algorithmic ideas
Better able to formally express concepts
Improved ability to select appropriate languages
Easier to learn new languages
Understand the significance and impact of language choices and constructs
Able to design new languages (little languages, interface specifications, protocols)


Course Grade and Exams
We will have seven group quizzes and six group labs with individual submission, two individual tests, an individual final exam, nine individual homework assignments, three individual programming assignments, and one group programming assignment with group submission. The final grade will be computed as follows: quizzes count for 15%, labs for 15%, tests for 15%, final exam for 20%, homework assignments for 10%, programming assignments for 20%, and class attendance for 5%.