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