Course description: This course is an introduction to programming language design and implementation. From the design point of view, we will study language features as tools for expressing what and how to compute. From the implementation point of view, we will discuss interpreters for understanding language features and discuss compilers as tools for mapping language features onto computer hardware. The course will touch on a variety of languages in different programming paradigms. Rather than dwell on the features of any particular language, we will focus instead on understanding the commonalities and differences among languages, the reasons for them, and the implications of them. Students will do biweekly programming assignments, mostly in Python, to better understand language features and language processing. | Prerequisites: C or higher: CSE 216 or CSE 219 or CSE 260, CSE 220, CSE major | Credits: 3 | Official description and learning outcomes
Instructor: Annie Liu | Office: New CS 237 | Phone: 631-632-8463 | Email: liu@cs.stonybrook.edu | Office hours: Mon 12:40-1 PM, 2:20-3 PM, Thu 4:20-5 PM, Fri 12:20-1 PM, 2:20-2:40 PM, or email for an appointment.
TAs:
Sucharitha Inapanuri
| TA Office: CS 2126
| Email: sucharitha.inapanuri@stonybrook.edu
| Office hours: Tue Fri 4:30-5:30 PM, Thu 5:30-6:30 PM.
Kushaal Hulsoor
| Email: khulsoor@cs.stonybrook.edu
| Office hours: by appointment.
Lectures: Mon Fri 1-2:20 PM, New CS 120 (Note: the first class will be on Zoom)
Textbook: Programming Language Pragmatics by Michael Scott. 4th Edition, Morgan Kaufmann Publishers, 2016. Errata. This is an excellent textbook that covers both language design and implementation. Relevant additional materials will be given under resources as the course proceeds.
Grading: Lecture critiques: 5% | In-class exercises: 10% | Assignments: 10% | 2 Quizzes: 2 x 20% | Final exam: 35% | Extra-credit project: 15% | No late submission will receive credit.
Course homepage: http://www.cs.stonybrook.edu/~liu/cse307/
Schedule
14 Weeks total for 5 units: 13 topics, each two lectures, plus 2 quizzes
Unit 1. Overview and language examples
1. Language overview---what, why, and how:
data/control/module abstraction, interpreter/compiler
2. Language examples---Python, SML, Prolog, and more:
sets, functions, rules, objects, concurrent/distributed
Unit 2. Language processing
3. Syntax analysis---scanning, parsing:
RE, NFA/DFA/min DFA, CFG, LL/top-down vs LR/bottom-up parsers
4. Semantic analysis---static semantics:
AG, attribute eval., action routines, AST, type checking, code gen.
Quiz 1 (Feb. 20, 2023)
5. Names----scopes and bindings:
static/stack/heap obj., GC, scoping: sta./dyn., aliasing, polymorphism
Unit 3. Data types and control flows
6. Imperative languages---expression eval., variable as value vs reference,
assignment/seq'g/sel'n/iteration, recursion, generator, nondeterminism
7. Data types---record/variant, array/sequence/set, pointer, recursive:
typing: strong/weak/static/dynamic, type system/checking/inference
Unit 4. Data abstraction and control abstraction
8. Database languages---sets and relations, queries:
comprehension/aggregation/quantification, invariants, incremental updates
9. Functional languages---recursive functions, call by reference/value/name,
eager/lazy, higher-order, lambda calculus
Quiz 2 (Apr. 7, 2023)
10. Logic languages---rules, search, efficiency:
logic/relational/recursive programming, tabling, negation/aggregation
Unit 5. Module abstraction and concurrency
11. Object-oriented languages---encapsulation, inheritance:
objects, attributes, multiple inheritance, evolution of abstraction
12. Concurrent and distributed languages: shared-memory/message-passing,
thread/process, synchronous/asynchrounous, history queries
13. Language review and outlook---ease of programming, integrated languages:
correctness/efficiency/productivity, clarity, procedural/declarative
Final exam (May 15, 2023, 2:15-5:00 PM)
Google Classroom for this course, for students in the course
References
Follow all information in the Google Classroom for this course.
Attend all lectures and take good notes. This is the most efficient way to learn the course materials, because we will both distill and elaborate written materials and discuss important related materials. We will start promptly on time. We will have every student participate in solving problems and presenting solutions in class.
Do all course work. The readings are to help you preview and review the materials discussed in the lectures. The assignments are to provide concrete experiences with the basic concepts and methods covered in the lectures. The exercises are to help check that you are keeping up with the lectures and the assignments. The exams will be comprehensive.
If you have any questions, ask. Ask questions in class, in office hours, and in the Q&A forum. Talk with your classmates, and share ideas, but not solutions to assignments.
Your submitted work
Submission issues
Grading issues
University Policies