CU website

Software project





Supporting Material



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 computer.
  • 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 translation.

  • Encoding a Tree: See how to take advantage of the degrees of freedom inherent in programming language definitions, making effective use of machine resources.

  • Retrospective: 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?

Instructor Revision 1.5 (1998/08/06 21:36:49)