CU website

Software project





Supporting Material



ECEN 4553
Introduction to Compiler Construction

This course follows the software project strategy:
  • Focus
    • making the student a more competent software developer
  • Outcomes
    • improved collaborative skills
    • understanding of the decomposition process
    • understanding of reuse mechanisms
  • Concepts
    • problem decomposition
    • structured decision making
    • reuse strategies
    • extreme programming
  • Assignments
    • collaborative design
    • writing tests and modules
  • Tools
    • generators
    • design patterns
    • implementation language code
    • class libraries
Compiler construction techniques underlie most of a user's communication with a computer system. They are applied in the implementation of a variety of user interface software, ranging from compilers for full programming languages through specialized application programs to operating system command processors. 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.

The algorithms and data structures on which compilers are based are important tools for virtually anyone working in the computer field. After taking this course, you should have:

  • 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.
  • The ability to realize concepts of imperative languages in terms of concepts embodied in computer hardware.

Examinations are used to measure your standing with respect to these goals, and constitute the major portion of your grade.

An ability to make and honor commitments is fundamental to any engineering professional. This course will help you to:

  • Understand the breakdown of projects into specific deliverables and process steps.
  • Develop methods for tracking your time and defect performance.
  • Establish baseline data that you can use for project planning purposes in other courses and in your professional life.

Planning and reflection exercises are used to focus your attention on these aspects of software development, and constitute a minor portion of your grade.

We make the course material available to you through readings, lectures, discussions, and homework problems. The readings present general principles for structuring a compiler and solving standard sub-problems of compilation in the context of a specific task. They also provide strategies for measuring and improving your productivity. Lectures and discussions emphasize the broad applicability of these approaches and concentrate on the more difficult points. 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.

The criteria for an adequate background are that you understand the concepts of programming, are familiar with one imperative programming language and one processor architecture, and are able to cast solutions to problems in terms of algorithms and data structures. Experience with an object-oriented programming language like C++ or Java is useful, but C, Pascal, or FORTRAN is also acceptable. You must also have written machine-level code in some assembly language.

Revision 2.12 (1998/08/07 00:07:37)