Announcements

19-August: The End
Many thanks to Steve Freund, Maggie Johnson, Julie Zelenski, and Jerry Cain for building up the handouts, Decaf specification, and projects for this course. It would not have been the same without their years of hard preparation which we were able to use and build on.

Also, I wanted to share some of the cool extensions our students worked hard to build this quarter. PP4 had many of these. Three people submitted fun Decaf applications including games like Video Poker and Monopoly, as well as a neat simulation which you have probably heard of - Conway's Game of Life.

Other impressive extensions included various optimizations (dead code elimination, temporary variable reuse, constant folding, etc.) and support for interfaces and non-standard Decaf constructs like Switch and For Each. There was also a pass-by-reference implementation and another which supported non-virtual methods!

In earlier assignments, the most impressive extensions included two successful Decaf-to-C++ compilers which created impressively well-formatted and semantically correct C++ code.

I hope everyone learned a lot; you've certainly worked very hard and in many cases exceeded our expectations!

Awesome work! Thanks for a wonderful summer quarter!

All the best,

~ David Underhill

15-August: Final Exam
The final exam has been posted. Instructions are on the first page of the exam.
13-August: Practice Final
A practice final and its solution has been posted. The 24-hour final exam will be emailed to all students at 4:00pm on Friday. It is due twenty-four hours later on Saturday 16-August at 4:00p.m.
04-August: Project 4
Here is a link to the final project! It is due Friday 15-August at 4:00p.m.
04-August: Week 7 Material (04 August)
25-July: Midterm Feedback
25-July: Week 6 Material (28 July-01 August)
21-July: Midterm Exam Solutions
10-July: Week 5 Material (21 July-25 July)
  • Lecture #13 (Mon 21-Jul): Midterm Exam
  • Section #04 (Tue 22-Jul): Semantic Analysis + PP3
  • Lecture #14 (Fri 25-Jul): Runtime Environments
16-July: Project 3 Posted
The third project is now available here! It is due in two weeks (Wednesday 30-July) at 4:00p.m. You should also look over the PP3 FAQ. A copy of the e-mail sent out regarding this assignment is available here.
15-July:Section 3 Handout + Solution
14-July: Problem Set 1 returned
14-July: Practice Midterm Posted
10-July: Week 4 Material (14 July-18 July)
07-July: Project 2 Posted
The second project is now available! It is due next Wednesday (16-July) at 4:00p.m. You should also look over the PP2 FAQ. A copy of the e-mail sent out regarding this assignment is available here.
07-July: NDFA to DFA Conversion Supplement
A supplement which describes how to convert NDFAs to DFAs has been posted.
03-July: Week 3 Material (07 July-11 July)
The handouts and videos for next week's lectures are now available. From now on, we'll be releasing lectures on the Friday before they start, rather on Mondays.
02-JuLY: Problem Set 1 Posted
The first written assignment is now available. It is due next Wednesday (09-July) at 4:00p.m., as usual.
30-June: Week 2 Material (30 June-03 July)
This week's handouts are and lecture videos are now available. The first written assignment will be released later this week.
26-June: Project 1 Posted
The first assignment is now available! It is due next Wednesday (02-July) at 4:00p.m. Be sure to read the entire assignment very carefully -- trust me, it's worth the effort! You should also look over the PP1 FAQ, the general project coding guidelines, and submission instructions when you get a chance. A copy of the e-mail sent out regarding this assignment is available here.
24-June: Week 1 Material (24-27 June)
This week's handouts are and lecture videos are now available. Videos can be found at Lecture Videos. The handouts are located below and on the Schedule page. The first assignment will be released later this week.
07-June: What to Expect
CS143 is a first course in compilers, designed to introduce the student to the principles and practices of programming language implementation. We cover lexical analysis, parsing theory, semantic analysis, runtime environments, and code generation. The coursework will consist of programming projects, pencil-and-paper problem sets, a midterm, and a final exam. The four programming projects comprise a series of milestones that will ultimately lead to an operational compiler for a miniature object-oriented programming language.
CS143 Resources
Outside Resources
Command References