Syllabus for the Course
Here is a brief description of the main points to be covered in this
course, and how they relate to one another.
A detailed lecture schedule
is also available.
- The Compilation Task:
See how a compiler is structured, and what
tools and techniques can be used to implement it.
- A Personal Engineering Process:
Learn the importance of monitoring the amount of time you spend in various
activities, and using that information to predict your requirements.
Gain practice in this skill by applying it throughout the course.
- Making Semantics Visible:
Abstract the relevant properties of a program and represent them in a
- Converting Strings to Trees:
Read text, break it into relevant units,
and build a data structure that reflects the meaning.
- Computations Over Trees:
Study solutions for two common semantic problems to learn how standard
design patterns are applied to tree computations.
Generalization from the two solutions leads to a design
process for any tree computation.
- Tracking Defects:
Defects don't just happen, they are injected during implementation.
Learn how to improve your performance by tracking defects and reflecting on
how they were injected.
Practice this skill in the remaining exercises.
- Translating Source Concepts to Target Concepts:
Deepen your understanding of programming language semantics by expressing them
in terms of machine operations and storage.
Explore ways of describing these relationships and using them to guide
- Encoding a Tree:
See how to take advantage of the degrees of freedom inherent in programming
language definitions, making effective use of machine resources.
Evaluate the quality of the code implied by our model of compilation.
Where do we win?
Where do we lose?
What could we do about it?