Course Overview

High-level programming languages like Python make programming a breeze, but how do they work? There's a big gap between Python and machine instructions for modern computers. Learn how to translate Python programs all the way to Intel x86 assembly language.

Most compiler courses teach one phase of the compiler at a time, such as parsing, semantic analysis, and register allocation. The problem with that approach is it is difficult to understand how the whole compiler fits together and why each phase is designed the way it is. Instead, each week we implement a successively larger subset of the Python language. The very first subset is a tiny language of arithmetic statements, and by the time we are done the language includes objects, inheritance, and first-class functions.

The course has two broad topics:


Fluency in at least one programming language (e.g., Java, C, C++, Python). Students will do a lot of programming in Python, but prior knowledge of Python is not required. Prior knowledge of an assembly language helps but is not required.


You will be responsible for the following:

Late policy. 10% of the point value will be deducted for each day (including weekends) the assignment is late up to 3 days (i.e., on the 4th late day, an assignment submission will no longer receive credit).

Workload. The workload is up to 12 hours of out-of-class work per week.

4000-level vs. 5000-level. The main difference between between the undergraduate- and graduate-level courses will be the expectations for the final course project. Additionally, the final assignment of grades will be done separately for the 4000-level and the 5000-level students. The homeworks, quizzes, and exams will be the same.

Quizzes. If you must miss a class day with a quiz, please arrange with me in advance. You will not be allowed to make up quizzes after the fact.

Distance Learning

This course is also offered through the CAETE program. All assignment submission and content delivery will be electronic.

Deadlines. Distances students will follow the same assignment deadlines as in-class students. Content delivery should be essentially immediate. Exceptions will only be made in the case of extreme technical difficulties in publishing content.

Quizzes. The questions for quiz will be sent to you on the morning of the posted date of the quiz and you will submit your answers by 11:59 p.m. of the same day. The quizzes are closed book and should be completed alone, just use your brain and only use the computer to type in your answers. For example, do not use the Python interpreter on your computer to help you answer the quiz.

Textbook and Resources

Textbook. There is no required textbook for this course.

Course Notes. Most of the reading will come from the course notes, which may be updated throughout the semester.

Recommended Supplemental Books. The following are some other resources:

Copies of the compilers texts have been placed on reserve in the Engineering Library.


Moodle. We will use Moodle for grades and feedback. If do not already have an account, please create one and join the course moodle. The instructor will provide the enrollment key.

Piazza. We will be using Piazza for online, outside-of-class discussion. Rather than emailing questions to the teaching staff, most questions should be posted on Piazza. I encourage you to make class-wide posts whenever possible, but there is an option to send an instructor-private message. You also have the option of posting anonymously.

Off-Campus Access. The CU library has instructions for off-campus access to certain online resources (e.g., ACM Digital Library).


x86 Assembly.

Debugging Assembly.


Computing. For a Linux environment, the following are some resources:

Collaboration Policy

You are welcome and encouraged to work together in learning the material. If you worked with someone on an assignment, or if your submission includes quotes from a book, a paper, or a web site, you should thank the source. Bottom line, feel free to use whatever resources that are available to you as long as you cite them in your submission.

We will go by the honor code set forth by the University:

All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council and those students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member involved and non-academic sanctions given by the Honor Code Council (including but not limited to university probation, suspension, or expulsion).

Please refer to to view the specific guidelines. If you have any questions related to this policy, please contact the Honor Code Council at

Classroom Behavior

We trust and expect everyone to behave in a civil and courteous manner.

Discrimination and Sexual Harassment

We will go by the policies set forth by the University:

The University of Colorado at Boulder policy on Discrimination and Harassment, the University of Colorado policy on Sexual Harassment and the University of Colorado policy on Amorous Relationships apply to all students, staff and faculty. Any student, staff or faculty member who believes s/he has been the subject of sexual harassment or discrimination or harassment based upon race, color, national origin, sex, age, disability, creed, religion, sexual orientation, or veteran status should contact the Office of Discrimination and Harassment (ODH) at 303-492-2127 or the Office of Judicial Affairs at 303-492-5550. Information about the ODH, the above referenced policies and the campus resources available to assist individuals regarding discrimination or harassment can be obtained at

Special Accommodations

We will make every effort to make special accommodations that are reasonable and fair to all students. Please note that we will accept requests for adjustments during the first four weeks of class.


We will go by the disability guidelines set forth by the University:

If you qualify for accommodations because of a disability, please submit to the course staff a letter from Disability Services within the first four weeks of class so that your needs can be reasonably addressed. Disability Services determines accommodations based on documented disabilities (303-492-8671, Willard 322).

If you have a temporary medical condition or injury, see these guidelines.

Disability Services' letters for students with disabilities indicate legally mandated reasonable accommodations.

Religious Observances

We will go by the policy for religious observances set forth by the University:

Campus policy regarding religious observances requires that faculty make every effort to deal reasonably and fairly with all students who, because of religious obligations, have conflicts with scheduled exams, assignments or required attendance. In this class, we will try to accommodate religious conflicts in a reasonable manner. Please check the exam dates and submit all requests for adjustments within the first four weeks of class.

See for further details on the policy.


This course is based on one taught by Jeremy Siek in previous semesters.