EECS 483: Compiler Construction
Syllabus --Winter 2025
Meeting places & times
Lecture: 1010 DOW Monday and Wednesday 1:30 PM – 3:00 PM.
Recordings available on Canvas afterwards.Discussion: 1060 FMCRB Friday 12:30 PM – 1:30 PM
Course staff & office hours
Instructor |
|
|
|
|
| Mon & Thu 3:00-4:30pm (hybrid), | ||
GSI |
| Yuchen Jiang |
|
|
| Beyster Atrium |
| Wed 3:00-4:00pm & Fri 1:30-2:30pm |
IA |
| David Mekhtiev |
|
|
| Beyster Atrium |
| Tue 2:00-3:00pm |
|
Learning Objectives
EECS 483 covers the implementation of efficient compilers for programming languages. The course focuses on the connections between language features and the impact they have on the entire compiler pipeline. The course gradually builds up to an optimizing compiler for a dynamically typed language. We cover the compiler frontend, intermediate representations, backends, runtime systems as well as program analysis and optimizations.
Coursework
Students will be submit 5 programming assignments implementing a compiler, as well as a midterm and final exams. Homework assignments can be completed either alone or in groups of two.
External Links
This webpage contains the syllabus, materials from lecture, as well as the homework assignments. We will additionally use the following sites:
Grades and video lectures will be posted on Canvas
The Piazza bulletin board will be our main discussion forum.
Homework assignments will be submitted through Gradescope
Materials
Software
Programming assignments will use several pieces of software:
Rust is supported by many editors you may use any editor you wish.
Compilers written in the class will target x86_64, and be graded on Linux, and code is not cross-platform. I will provide pointers to how Mac users can easily make their code work on Linux, but Windows users are recommended to install a Linux distribution using WSL for testing. Instructions are provided here.
Books
This course has no required textbook. Instead, detailed notes and/or slides will be included on this webpage for every lecture. As an additional reference, the following textbooks may be useful to you.
|
|
|
Online resources
Rust Resources
Rust Learning Materials. We especially recommend the Rust Book as a thorough introduction to most relevant language features. You might be interested in this version of the Rust Book which has interactive quizzes to test your understanding.
This blog post has some good advice on learning Rust for the first time.
An interactive tutorial on using Git
X86 Resources
X64 Resources
A tutorial on NASM (specifically x64- and macOS-related issues)
Lectures
This table specifies the lecture schedule; topics are tentative. Lecture notes/slides will be added as the lectures take place
Date |
| Topics (tentative and approximate) |
| Materials |
1/08 W |
| Course overview, our first compiler |
| Reading: Rust book chapters 1-5, notes, notes, slides and neonate implementation |
1/13 M |
| Abstract syntax trees, interpreters, Rust and x86 basics |
| |
1/15 W |
| Variables, scope and memory |
| |
1/20 M |
| NO CLASS - MLK Day |
| |
1/22 W |
| Complex expressions, intermediate representations (No in-person lecture, video posted on Canvas) |
| |
1/27 M |
| Conditionals 1: Branching |
| |
1/29 W |
| Conditionals 2: Joining |
| |
02/03 M |
| Functions 1: Tail Calls |
| |
02/05 W |
| Loops and mutable variables |
| |
02/10 M |
| Functions 2: Call and Return |
| |
02/12 W |
| Calling conventions |
| |
02/17 M |
| Tail Call Elimination |
| |
02/19 W |
| Dynamic Typing |
| |
02/24 M |
| Heap Allocation |
| |
02/26 W |
| Closures |
| |
03/10 M |
| Register Allocation 1 |
| |
03/12 W |
| Register Allocation 2 |
| |
03/17 M |
| Midterm Review |
| |
03/19 W |
| Optimization 1 |
| |
03/24 M |
| Optimization 2 |
| |
03/26 W |
| Lexing 1: Frontend, Regex |
| |
03/31 M |
| Lexing 2: NFA/DFA |
| |
04/02 W |
| Parsing 1: Context-free grammars |
| |
04/07 M |
| Parsing 2: LL(1) grammars and parsers |
| |
04/09 W |
| Parsing 3: |
| |
04/14 M |
| Semanic Analysis 1 |
| |
04/16 W |
| Semanic Analysis 2 |
| |
04/21 M |
| Verified Compilation |
|
Testing
Testing your code is sufficiently important that we’ve devoted an entire page to it. Please read these notes, for each and every assignment you work on.
Homework and Exam schedule
Link |
| Assigned |
| Due |
| Wed 01/15 |
| Fri 01/31 | |
control-flow |
| Mon 02/03 |
| Fri 02/14 |
procedures |
| Mon 02/17 |
| Fri 02/28 |
datatypes |
| Wed 03/19 |
| Fri 04/04 |
optimizations |
| Mon 04/07 |
| Fri 04/18 |
Exam |
| Date |
| Time |
| Location |
Midterm |
| Tue 03/18 |
| 6-8pm |
| TBD |
Final |
| Wed 04/30 |
| 4-6pm |
| 1010 DOW |
Course policies
Collaboration and academic integrity
Programming assignments may be completed with a partner or solo.
You must collaborate with your assigned partner or team, as specified, on homework assignments. You may request help from any staff member on homework. (When you are working with a partner, we strongly recommend that you request help with your partner, rather than solo.) You may use the Piazza bulletin board to ask questions regarding assignments, so long as your questions (and answers) do not reveal information regarding solutions. You may not get any help from anyone else on a homework assignment; all material submitted must be your own. If in doubt, ask a member of the course staff.
Providing illicit help to another student is also cheating, and will be punished the same as receiving illicit help. It is your responsibility to safeguard your own work.
Students who cheat will be reported to the university’s office on academic integrity and penalized by the course staff, at our discretion, up to and including failing the course.
If you are unclear on any of these policies, please ask a member of the course staff.
Homework
We will be using the following gradescope page for homework submissions.
Late days & late work
Homework will (typically) be due Friday at 11:59pm. Late work will be accepted for the next two days: a 10% deduction if by Saturday 11:59pm and a 20% deduction if by Sunday 11:59pm. After that, late submissions will not be accepted. This policy generally holds unless otherwise specified in the assignment.
Grades
Your grade will be based on your performance on the programming assignments and exams. Each assignment is worth 14% of your final grade, totaling 70%. The midterm and final are each worth 15%.
Course grades overall will not be curved, but exams will be curved if necessary to match recent course median grades.
The estimated mapping of raw point totals to letter grades is given below. Please note that these grade boundaries may move slightly in either direction at the discretion of the instructor: if a particular breakpoint falls in the middle of a tight cluster of numeric grades, we will attempt to move the breakpoint to give that whole cluster the same letter grade. If, near the end of the semester, you are concerned that your grade is hovering near a breakpoint, see me to discuss your concerns.
Cutoff |
| 100% |
| 93% |
| 90% |
| 86% |
| 83% |
| 80% |
| 76% |
| 73% |
| 70% |
| 66% |
| 63% |
| 60% |
| else |
Letter grade |
| A+ |
| A |
| A- |
| B+ |
| B |
| B- |
| C+ |
| C |
| C- |
| D+ |
| D |
| D- |
| F |