CS 4100: Introduction to Formal Languages and Compilers

Spring 2018

Formal Languages and Compilers

An upper-level course for CS majors on formal languages theory and compilers.

Topics (subject to revision): regular expressions; finite automata; context-free grammars; predictive parsing; LR parsing; abstract syntax; type systems and type-checking; stack layout and activation records; intermediate representations; control-flow graphs; static-single assignment (SSA) form; dataflow/liveness analysis; register allocation; garbage collection/runtimes; the LLVM compiler infrastructure. Over the course of the semester, students will implement a full functioning compiler for a small imperative programming language, targeting LLVM. The course involves a significant amount of programming.

Lecture: Tuesday, Thursday 1:30–2:50 p.m., Walter Hall 135
Professor: Gordon Stewart (gstewart@ohio.edu)
Office Hours: T 3-4:30pm (Stocker 355), or by appointment
TA: Nathan St. Amour (ns196414@ohio.edu)
Lab Hours: Mondays before assignments due, 3-4:30pm in Stocker 307 (tentative)
Piazza: Course Page, Signup

Resources

Textbooks and Software

The primary text is While a hard copy of this book is certainly worthwhile, before you buy I urge you to check out the library's electronic version. If you don't mind reading on your laptop screen, the electronic copy may save you some money!

Periodically I may assign additional supplementary (optional but recommended) readings from resources such as

all of which are freely available online to registered OU students.

Prerequisites

CS 3200 and 3610, but also: Some mathematical maturity (at the level of "I've seen and done a few proofs before"), facility with a couple different programming languages (at the 3200 level of exposure), and a desire to learn.

Course Difficulty

This is a demanding course that requires extensive programming work, in the form of a series of (often increasingly) difficult assignments. Expect to put in at least 10 hours (sometimes much more) per programming assignment.

Course Structure

The course consists of twice-weekly lectures (Tuesday and Thursdays), attendance at which is required. To help get you up to speed with OCaml and the course programming assignments, we'll also hold biweekly lab hours (time TBD). Although attendance at the lab hours is optional, I highly recommend that you attend — at least for the first few weeks of the course. The programming assignments for this course are extensive and time consuming, so be prepared!

In addition to biweekly homework assignments, there will be a midterm exam (Week 7, approximately 15% of your grade) and a final (approximately 25%). The biweekly homeworks (programming assignments) are worth approximately 40%. We'll have weekly quizzes every Tuesday (with probability 1/3), along with bi-weekly offline Blackboard quizzes (total 10%). Participation and attendance at lecture are worth 5%. You get an additional 5% for free, just for signing up for the course.

Blackboard will be used only to report grades and to post lecture notes. Up-to-date information on all other aspects of the course (assignment due dates, etc.) will be posted either on this website or on the Piazza page or both.

Assignments Key:
Programming Assignment
Quiz Available On Blackboard

Schedule (Tentative)

Intro. to Compilers, OCaml
W1: 1/15-19
Introduction to compilers and functional programming in OCaml
Reading: Appel 1; RWO I.1.
Supplemental Reading: OCaml Manual: Core Language.
W2: 1/22-26
More functional programming: polymorphism, higher-order functions, algebraic datatypes and pattern-matching
Supplemental Reading: OCaml Pervasives Library (reference)
A0 Due 1/23 at 11:59pm: A0: Intro. to OCaml.
Q0 Due 1/23 at 11:59pm
OCaml QuickStart Lab: Monday 1/22/18, 3-4:30pm, Stocker 307
Lexing and Parsing
W3: 1/29-2/2
Regular expressions, regular languages
Reading: Appel 2 (up to and including 2.2)
A1 Due 1/30 at 11:59pm: A1: Functional Programming in OCaml.
Q1 Due 1/30 at 11:59pm
W4: 2/5-9
DFAs and NFAs, lexer generators
Reading: Appel 2.3-2.5
Q2 Due 2/6 at 11:59pm
W5: 2/12-16
Context-free languages, pushdown automata
Reading: Appel 3 (through Section 3.1)
A2 Due 2/15 at 11:59pm: A2: Regular Expressions Re-Examined.
W6: 2/19-23
Recursive descent parsing, predictive parsing, parser generators
Reading: Appel Sections 3.2-3.5
Q3 Due 2/20 at 11:59pm
Types and Type-Checking
W7: 2/26-3/2
Abstract syntax trees, type systems
Reading: Appel 4, TAPL 8 (OU Library eBook)
Q4 Due 3/1 at 11:59pm
W8: 3/5-9
Symbol tables, type-checking
Reading: Appel 5
A3 Due 3/6 at 11:59pm: A3: Lexing and Parsing with ocamllex and Menhir.
Midterm Exam: Thursday 3/8
W9: 3/13-3/16 Spring Break, No Class
Intermediate Representations
W10: 3/19-23
Control-flow graphs, dominators
Reading: Appel 7.1, Appel 18.1
W11: 3/26-30
Use-def, dataflow/liveness analysis, Static Single Assignment (SSA) form, interference graphs
Reading: Appel 10.1, Appel 19 (up to but not including 19.1)
A4 Due 3/29 at 11:59pm: A4: Type-checking.
W12: 4/2-6
Dataflow analysis contd., translation to SSA form
Reading:
Q5 Due 4/3 at 11:59pm
Runtimes and Garbage Collection
W13: 4/9-13
Stack layout and activation records; Intro. to runtimes, garbage collection; mark-and-sweep collection, copying collection, reference counting, generational collection
Reading: Appel 13, through 13.4; Appel 6.1
Q6 Due 4/10 at 11:59pm
A5 Due 4/15 at 11:59pm: A5: SSA.
Thursday 4/12: NO CLASS (Student Expo 11:30am-2:30pm)
W14: 4/16-20
Intro. to LLVM assembly and the LLVM compiler toolkit; intro. to register allocation
Reading: Appel 11 through 11.3; AOSA: LLVM
Q7 Due 4/17 at 11:59pm
Register Allocation
W15: 4/23-27
Register allocation contd., final exam review
EC A6 Due 4/24 at 11:59pm: A6: LLVM.
Tuesday 5/1@12:20pm: FINAL EXAM

Student Outcomes vs. Course Learning Outcomes

(a) An ability to apply knowledge of computing and mathematics appropriate to the program's student outcomes and to the discipline. Students will be able to:

(b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution. Students will be able to:

(c) An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs. Students will be able to:

(j) An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices. Students will be able to:

(k) An ability to apply design and development principles in the construction of software systems of varying complexity. Students will be able to:

Homework and Collaboration Policies

Acceptable Collaboration Matrix

Instructor/GANoninstructor (e.g., Another Student)
Youall collaboration allowedhigh-level discussion (of the problems, not your code!) allowed but only after you've started the assignment; must be documented in README as described below

Unless otherwise noted, homeworks are due Tuesdays by 11:59 p.m. Late homework assignments will be penalized according to the following formula:

You may discuss the homework with other students in the class, but only after you've attempted the problems on your own first. If you do discuss the homework problems with others, write the names of the students you spoke with, along with a brief summary of what you discussed, in a README comment at the top of each submission. Example:

(* README Gordon Stewart, Assn #1
I worked with X and Y. We swapped tips regarding the use of pattern-matching in OCaml. *)

However, under no circumstances are you permitted to share or directly copy code or other written homework material, except with course instructors. The code and proofs you turn in must be your own. Remember: homework is there to give *you* practice in the new ideas and techniques covered by the course; it does you no good if you don't engage!

That said, if we find that you have cheated on an assignment in this course, you will immediately:

Students in EECS courses such as this one must adhere to the Russ College of Engineering and Technology Honor Code, and to the OU Student Code of Conduct. If you haven't read these policies, do so now.

Students with Disabilities

If you suspect you may need an accommodation based on the impact of a disability, please contact me privately to discuss your specific needs. If you're not yet registered as a student with a disability, contact the Office of Student Accessibility Services first.