CU website







Supporting Material

Semester Projects


ECEN 4553
Introduction to Compiler Construction

This course follows the strategy of supporting communication with the computer:
  • Focus
    • making the computer a more capable assistant
  • Outcomes
    • understand fundamental concepts of programming languages
    • recognize applications for domain-specific languages
    • quickly create robust language processors
  • Concepts
    • representing languages: syntax, semantics, pragmatics
    • tree computation, entities, and properties
    • analyzing phrase structure
    • tree transformation
  • Assignments
    • implement a variety of tree computations
    • analyze common phrase structures
    • create an application generator
  • Tools
    • compiler construction toolkit
Compiler construction techniques underlie most of a user's communication with a computer system. They are applied in the implementation of a variety of software, ranging from compilers for full programming languages through specialized application programs to operating system command processors. Virtually every computing professional will need to build some kind of software using these techniques many times during their career.

Compiler construction is also an excellent example of ``programming in the large'', showing the application of software engineering principles to the solution of a familiar problem. Libraries of solutions to typical subproblems are available, and can be combined with high-level specifications of behavior to produce processors whose performance is comparable to that of a hand-coded program.

The purpose of this course is to familiarize you with use of compiler technology in a wide variety of applications. After taking it, you should have:

  • An understanding of the software architecture developed over the past 45 years for translator applications.
  • An understanding of how linear sequences of characters are represented as hierarchical structures that encode meaning.
  • Familiarity with common techniques for analyzing relationships among components of hierarchical structures and transforming those structures.

We make the material available to you through readings, discussions, laboratory experience, and homework problems. The readings present general principles for structuring a compiler and solving the standard sub-problems of compilation. Class and laboratory sessions emphasize the broad applicability of these approaches and concentrate on the more difficult points while giving supervised practice. Homework assignments are used to focus your attention on specific applications of the general principles, forcing you to work out details that you might otherwise gloss over. This strategy integrates general explanations, specific examples, and hands-on experience to provide support for all learning styles.

Familiarity with Unix and comfort with programming should prepare you for this course. Experience with an object-oriented programming language like C++ or Java is useful, but C, Pascal, or FORTRAN is also acceptable. The criteria for an adequate background are that you understand the concepts of programming, are familiar with one imperative programming language, and are able to cast solutions to problems in terms of algorithms and data structures.

Revision 1.4 (2005/08/21 16:51:58)