Introduction to Compiler Construction
This course follows the strategy of supporting communication with the
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.
- making the computer a more capable assistant
- understand fundamental concepts of programming languages
- recognize applications for domain-specific languages
- quickly create robust language processors
- representing languages: syntax, semantics, pragmatics
- tree computation, entities, and properties
- analyzing phrase structure
- tree transformation
- implement a variety of tree computations
- analyze common phrase structures
- create an application generator
- compiler construction toolkit
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,
are able to cast solutions to problems in terms of algorithms
and data structures.