News
- Nov 28. The final will be on Thu Dec 1 7:45pm-9:45pm in ECCR 245.
- Oct 30. Project dates have been posted. Some project ideas are on the moodle.
- Oct 19. The midterm will be on Thu Oct 27 7:45pm-9:45pm in ECCR 1B40.
- Aug 28. The homework submission site is ready (for homework 1).
- Aug 28. Register a code word. Your code word will be used for grading your homeworks and showing your status on the homework leaderboard. You will want to keep your code word private. Please do so by Tuesday, August 20 at 8:00 a.m. so that the homework submission site can be opened up to you in a timely manner.
- Aug 23. No class on September 13 and 15, as Evan will be traveling. Watch recorded lectures instead. Quiz 2 will be submitted electronically.
- Aug 23. First day of class!
- Aug 21. All students should have received a welcome e-mail from me on how to enroll on Moodle and Piazza. If you did not receive such a message, please send me an e-mail. Once you get set up, post a note introducing yourself.
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:
- Compilation and Language Transformation: How do we manipulate and translate programs? You will gain experience building such programming language tools.
- Research Applications: You will explore more advanced ideas of your choosing through a final course project.
Prerequisites
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.
Requirements
You will be responsible for the following:
- Homework Projects (25%). There will be bi-weekly homework projects during the first part of the course.
- Quizzes (15%). There will be in-class quizzes during the first part of the course.
- Final Project (15%). In the second part of the course, you will spend your time on a final project. You will create a final project that explores, extends, or experiments with the ideas in the course.
- Class Participation (5%). Participation includes both in-class and online discussion.
- Midterm Exam (15%).
- Final Exam (25%).
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:
- Andrew W. Appel. Modern Compiler Implementation in ML or Modern Compiler Implementation in Java, 2nd edition [e-book via CU library]. There is also a C version of this book.
- Aho, Lam, Sethi, and Ullman. Compilers: Principles, Techniques, and Tools, 2nd edition.
- Alex Martelli. Python in a Nutshell.
Tools
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).
Python.
- Python Lex-Yacc (PLY)
- IDE: PyDev is a plug-in for Eclipse
- Emacs tips for Python
x86 Assembly.
- Intel Manuals
- IA32 Assembly for Compiler Writers
- Intel Manuals
- Nice slides about x86 architecture and assembly language
- Introduction to Linux Intel Assembly Language
- Linux Assembly Hello World Tutorial
- GNU Assembler Manual
- x86-64 Machine-Level Programming
Debugging Assembly.
Other.
- Video about pair programming.
- Script to automate regression testing (from previous semester): run_tests.py and colors.py.
Computing. For a Linux environment, the following are some resources:
- CS students can create a a CSEL account. CSEL has a lab in ECCS 128 and remote access servers with SSH (elra-01 through elra-04.cs.colorado.edu).
- ECEE students can create an ECES account.
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 www.colorado.edu/honorcode/ to view the specific guidelines. If you have any questions related to this policy, please contact the Honor Code Council at honor@colorado.edu.
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 www.colorado.edu/odh.
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.
Disability
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 www.colorado.edu/policies/fac_relig.html for further details on the policy.
Acknowledgments
This course is based on one taught by Jeremy Siek in previous semesters.
