Course Information
Course Catalog Description
Syntax and semantics. Compilers and interpreters. Programs as data. Regular expressions and context free grammars. Programming paradigms, including procedural, functional, and object-oriented programming. Type systems, including dynamic and static typing disciplines. Binding, scope, data abstraction, and modularity. Denotational, operational, and axiomatic semantics. Introduction to program correctness.
Format
- Class meetings will be conducted in person.
- Classes will include a mixture of lectures and live problem solving. A laptop will sometimes be useful.
- Each class will have slides and/or lecture notes, which will be made available before each class.
- Attendance at all class meetings is expected, although it will not factor explicitly into your grade.
- Classes will be recorded but quality (especially whiteboard visuals) may not be high. Recordings will be made available on Canvas. Listening to recordings is generally not a good substitute for class attendance.
Textbook
There is no required textbook.
Prerequisites
CS302, CS314(=CS300), CS350 passed with grades of C or better.
CS202 is an acceptable subtitute for CS302.
It is assumed that you have substantial programming experience in C/C++ and some experience using Python.
Requirements and Grading
-
Course grade is based on three different kinds of required course activities:
- There are no exams.
- Weekly exercises are not graded; you will receive credit for any good-faith attempt submitted by the deadline.
- Each project and report milestone will be given a point score according to a rubric.
- Course letter grades will be assigned on a sliding scale based on your total point score. There are no absolute
percentages associated with the different grades. We will calculate your preliminary grade at various points
during the term.
Practice Exercises
- There will be weekly (ungraded) exercise assignments, intended to help you do the (graded) project and report.
- Many exercises will involve use of Python, but there will be other kinds of problems too, including
short-answer questions about language features and "mystery language" investigations.
- Exercises will not be graded; you will receive credit for any good-faith attempt.
- Completed exercises for each week must be submitted on Canvas by
noon on Mondays to receive credit. This deadline is strict, and extensions will not be given.
- Test suites and sample solutions will be posted for you to compare to your own work.
Interpreter Implementation Project
- Over the course of the term, you will implement an interpreter for a small
programming language.
- The language will include a common core of language features plus a domain-specific extension of your choice.
- We will provide background information and assistance for possible domains. The preliminary list of domains
includes: string processing, image construction, music composition, database querying, unix shell.
- You may choose a different domain with prior permission of the instructor and TA.
- This project will have three intermediate deliverable milestones spaced over the term (see the schedule),
with the final version due at the end of term.
- Extensions to the due dates for intermediate and final versions will only be given in
extraordinary circumstances and require advance permission from the instructor.
- Each intermediate and final milestone will be given a point score and
accompanied by feedback on the deficiencies that
led to any point deductions. You will have the opportunity to correct these deficiencies and resubmit to improve
your score (by up to 50% of the original deduction). This opportunity will not apply to the final versions.
Language Analysis Report
- Over the course of the term, you will analyze and report on how various language features are (or are not)
provided in a real-world programming language of your choice.
- The preliminary list of allowed languages is: Java, TypeScript, Go, Haskell, Scala, Rust.
- You may choose a different language with prior permission of the instructor and TA.
- There will be one intermediate milestone for this report partway throught the term (see the schedule),
with the final report due at the end of term.
- Extensions to the due dates for intermediate and final versions will only be given in
extraordinary circumstances and require advance permission from the instructor.
- The intermdiate and final versions will be given a point score and
accompanied by feedback on the deficiencies that
led to any point deductions. You will have the opportunity to correct deficiencies in the intermediate
version and resubmit to improve your score (by up to 50% of the original deduction).
This opportunity will not apply to the final versions.
Computing Resources
- You will need access to a system running Python3.12 (or later).
- Depending on your choice of domain-specific extension for the implementation project, you may need
additional auxiliary software. For example, if you choose the music composition option, you'll want software
to play MIDI files.
- We strongly recommend installing Python on your own computer.
- It is also possible to use a CS linuxlab machine, or the linux.cs.pdx.edu server.
- Unless you already have a strong commitment to another editor, we recommend using VS Code,
with the plugins for Python, Python Debugger, Pylance (type checker), and GitHub Copilot (use with due caution!).
(You can also use VS Code on your machine to work on a code base on a remote machine using the Remote-SSH plugin.)
- If you have difficulties setting up your Python environment, contact the instructor or TA (or ask on the course slack channel; this
is a place where crowd-sourcing can be very effective!).