Home | People | Curriculum | Projects | Resources | Media

CMSC 350b: Compiler Design

Instructor: David Wonnacott

Semester & Year: Spring 2014

Schedule: Lecture 10:00-11:30 T/Th in KINSC H108; Scheduled Labs Tuesday either 11:30-12:15 or 2:30-3:15 in KINSC H110
NOTE: If there are more than 18 students in the class, we'll either expand to two one-hour labs, or (better yet) add a third 45-minute section Tuesday afternoon or on Wednesday.

Lab attendance is required for students who have not submitted the current lab project.

Prerequisites: CMSC 245 Concurrent enrollment in this and two other CMSC lab courses requires permission of the instructor.


Other Resources:

Description: An introduction to compiler design. Students undertake a semester-long laboratory project, building a compiler to turn Andrew Appel's "Tiger" language into an equivalent HERA assembly language program that can then be executed on the HERA-C simulator or assembled using the Hassem assembler and run on (simulated) HERA microprocessors created in CMSC 240. Lectures combine practical topics such as the use of compiler construction tools and techniques with more abstract discussions of the algorithms upon which these tools are based and discussions of techniques that are beyond the scope of our one-semester lab project.

This course covers the classic steps of compilation, specifically

In so doing, it also serves as a vehicle for several advanced topics in the design, analysis, and use of algorithms and data structures:

Requirements: Midterm and Final exam, Lab projects, "mini-homework" assignments and other class participation.

Late Submission of Projects: The lab projects for this course are cumulative, and getting behind on one can cause a "cascade of lateness" that can leave an insurmountable amount of work for the end of the semester. Thus, lab work must be submitted on time to recieve credit beyond the "basic" level, except in case of illness or other emergency qualifying for a note from a dean, or one instance in which a lab can be submitted up to 3 days late just due to difficulty scheduling work (please notify me in advance if you want to take advantage of this last rule).

Collaboration: You are encouraged to discuss the lecture material and the weekly labs and "mini-homework" problems with other students, subject to the following restriction: for labs, the only "product" of your discussion should be your memory of it - you may not write up solutions together, or exchange written work or computer files. Unlimited collaboration is allowed on "mini-homework" assignments, which may be written up jointly. Collaboration is not allowed on exams.


The lab projects are undergoing substantial revision for 2014, so see the information in the CS 350 S14 Google Docs folder.

The above labs make use of C++ files designed to work with Appel's textbook. Anyone outside of Haverford who is interested in these files, or planning to use Appel's book with C++, is encouraged to contact davew.

Mini-homework assignments:

Mini-homeworks will be assigned regularly to review or prepare for a given class. The mini-homework assigments will be posted on Moodle as they are relevant.

Haverford College Page maintained by John Dougherty, David Wonnacott, and Rachel Heaton.
Computer Science Department, Haverford College.