After completing the course, students will have
- Been exposed to the fundamentals of formal languages and
compilers theory—as outlined in the topics listed
above—and will have applied many of these fundamental ideas to
build their own working compiler
- Learned the basics of, and gained some facility with,
the functional programming language OCaml
- Had some fun along the way!
Textbooks and Software
The primary texts are
Hard copies of these books are certainly worthwhile, but before you buy I urge
you to check out the electronic reserves first. If you don't mind reading
on your laptop screen, the electronic versions 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.
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, and a desire to learn.
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 (Stocker 307A, Mondays 3:15 p.m.—4:30 p.m.). 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 (Week 15, approximately 30%). The biweekly homeworks are worth approximately 40%. We'll have weekly
quizzes every Tuesday (with probability 1/3, 5%). Participation and
attendance at lecture are worth 10%.
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.
Intro. to Compilers, OCaml
Lecture Thu. 1/21 Sam Merten leads "OCaml Bootcamp"
Lexing and Parsing
Lecture Thu. 2/11 In-Class Lab (Sam Merten)
Types and Type-Checking
Abstract syntax trees, type systems
Reading: Appel 4, TAPL 8 (OU Library eBook)
Type systems continued.
Reading: Appel 5
Midterm Exam: Thursday 2/25
W8: 2/28-3/5 Spring Break, No Class
Stack layout and activation records,
control-flow graphs, dominator computation, loop optimizations
Reading: Appel 6.1, Appel 7.1, Appel 18.1
Intro. to LLVM
Use-def, dataflow/liveness analysis,
Static Single Assignment (SSA) form,
Appel 10.1, Appel 19 (up to but not including 19.1)
: A5: SSA
Due Tuesday, 4/5
Runtimes and Garbage Collection
Introduction to LLVM assembly and the LLVM compiler toolkit
Reading: AOSA: LLVM
, by Chris Lattner
Intro. to runtimes, garbage collection;
mark-and-sweep collection, copying collection, reference counting,
Appel 13, through 13.4
: A6: LLVM
Due Tuesday, 4/19
Garbage collection contd.,
runtime representations of objects, of functions
(closures), of polymorphic variables
Register Allocation + Review
Reading: Appel 14.1-14.3 (objects), Appel 16.3 (polymorphism)
Reading: Appel 11 through 11.3
April 25-29: Final Exams
Homework and Collaboration Policies
Homework will usually be due Tuesdays, by the start of class (1:30 p.m.).
Late homework assignments will be penalized according to the following
- Up to 24 hours late: no deduction, for a max 2 late homeworks per
student across the entire semester
- Homeworks later than 24 hours, or from students who have already
turned in 2 late homeworks, will receive 0 points.
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
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!
In general, students in EECS courses such as this one should
adhere to the Russ College of Engineering and Technology Honor
Code, and to the OU
Student Code of Conduct.
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