CS 453 (and CS 453 DL) teaches students how to implement interpreters and compilers. Although most computer science professionals do not end up implementing a full compiler, alumni of this course are surprised by how often the skills they learn are used within industry and academic settings. The subject of compilers ties together many concepts in computer science: the theoretical concepts of regular expressions and context free grammars; the systems concept of layers including programming languages, compilers, system calls, assembly language, and architecture; the embedded systems concept of an architecture with restricted resources; and the software engineering concepts of revision control, testing, and the visitor design pattern.

Students write an interpreter for a small subset of the SVG (Scalable Vector Graphics) and a full compiler for a subset of Java called MeggyJava. We compile MeggyJava down to the assembly language for the ATmega328p microcontroller in the Meggy Jr RGB devices.

Michelle Mills Strout
Office: 342 CS Building
Office Hours in 342: Mon 3-4pm
Lab Hours in 130 or 315: Wed 2-3pm
Kiley Graim
Lab Hours in CS 130: Wed 12-1pm, 2-3pm, Fri 10am-noon
Lecture Time and Place:
11:00-12:15, Tuesday and Thursday, CSB Room 130
Recitation Time and Place:
9:00-9:50 am, Friday, CSB Room 215


In order to understand the material in this course, you will need to have a good working knowledge of data structures such as linked lists, trees, symbol tables, and dynamically allocated structures. You will need to know how to implement these data structures in Java, C, and C++. To successfully complete this course, you should be familiar with material related to the above topics covered in CS200 (Algorithms and Data Structures), CS253 (Problem Solving with C++), and CS314 (Software Development Methods). You will also need to have a good understanding of the memory model and the concept of calling conventions as covered in CS70 (Computer Organization).


Compilers: Principles, Techniques, & Tools, Second Edition by Aho, Lam, Sethi, and Ullman, Pearson Education, 2007. (Errata)

The progress page of this web site contains links to each weeks reading. Students are responsible for doing the assigned reading prior to the lecture in which the material is to be covered. Reading assignments are announced in class. Students in doubt about reading assignments are encouraged to ask for clarification in lecture. There are online quizzes about the reading assignments due the night before the associated lecture.


Here are the formally graded elements of the course and associated weighting:

Activity Weight
Programming Assignments (7) 40 %
Homework Assignments 10 %
Quizzes 10 %
Midterm 20 %
Final Exam 20 %

Semester grades are determined by the weighted sum of points earned in each of these areas. A compression curve is used for the midterm and final individually. All other grades in the course are not curved. The grading scale is as follows: >= 90 is an A, >= 88 is an A-, >=86 is a B+, >=80 is a B, >=78 is a B-, >=76 is a C+, >=70 is a C, >=60 is a D, and <60 is an F.

To pass this course, you must maintain at least a 50% average in the assignment grade (programming + homework assignments) and the test grade (quizzes + midterm + final). For example, a 100% in the assignment grade combined with a 49% test grade will NOT result in a passing grade.

There will be 6 homeworks and the lowest homework score will be dropped.

There will be 6 quizzes on the reading assignments and the suggested exercises. The lowest quiz score will be dropped.

Exams, homework assignments, and quizzes will be done individually and grades assigned on an individual basis.

The first project will be done individually and then students will be placed into programming pairs for later assignments. Partners will be selected by the instructor based primarily on similar grades for the first project and additionally based on student preferences.

Late and Makeup Policy

Midterm and Finals: Make-up exams are only given for extraordinary circumstances (e.g., illness, family emergency). Students must consult with the instructor as soon as possible, preferably before the start of the exam. Course examination dates are listed in the syllabus; be aware of them and plan accordingly.

Projects: Unless otherwise specified, programming assignments are to be submitted electronically using checkin. Specifics will be included in each assignment. Always check the assignment page for due dates. Late assignments submitted within 48 hours of the time required will receive a 10% late penalty. Electronic submission is closed 48 hours after assignments are due; students not having submitted programs receive an automatic zero on the assignment.

Important Dates

In class midtermTuesday, March 8th
Final Exam Thursday, May 12th, 11:50 AM to 1:50 PM

Any in-class midterms and the final exam will be held in the same classroom as regular lectures. While no change to the midterm dates is anticipated, the instructor reserves the right to change these dates with a weeks notice.

Class and Recitation Participation

All students taking this course are expected to participate actively. This includes asking and responding to questions. The material covered in the recitations will not be covered in lecture and will be on the midterm and final. During some of the recitations, you will need to show the TA a working piece of your current programming assignment. Such checkpoints will be part of the programming assignment grade.

Students are also expected to read the announcements/news on the main course web page, postings to the mailing list, and the progress page every day for any updates. Sign up for the mailing

Sign up for the mailing list at You will need a Google account, but you can use any email address to receive email from the mailing list.

Professional Conduct

All students are expected to conduct themselves professionally. We (the instructors and GTAs) assume you are familiar with the policies in the student information sheet for the department. Additionally, you are computing professionals, albeit perhaps just starting. You should be familiar with the code of conduct for the primary professional society, ACM. You can read the ACM Code of Conduct HERE.

We work to maintain an environment supportive of learning in the classroom and laboratory. Towards that end, we require that you be courteous to and respectful of your fellow participants (i.e., classmates, instructors, GTAs and any tutors). In particular:

  • The CS 130 linux lab is a professional environment and therefore professional behavior is expected in the lab 24 hours a day.
  • The CS 315 lab has 12 cables for the Meggy Jr devices. You will be required to share a cable with your partner if the lab is full. No food or drink will be allowed in the 315 lab this semester to prevent damage to the Meggy Jr devices and associated cables. Please help us with this rule by suggesting people take their food and drinks out into the 3rd floor lounge.
  • In the labs and in class, please turn off the ring on your cell phone. If you are expecting an emergency call, sit near the door and slide out discretely to take it.
  • In class use of electronic devices in general, and laptops specifically, is permitted as a courtesy so that you may better participate and learn. If at any time the instructor judges that an electronic device is becoming a distraction the student may be asked to to turn it off and put it away.
  • All exams and quizzes are to be done without the aid of notes of any kind. Laptops and all other electronic devices must be shut and put away during exams and quizzes.