Introduction to Compiler Construction
This course follows the software project strategy:
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.
- making the student a more competent software developer
- improved collaborative skills
- understanding of the decomposition process
- understanding of reuse mechanisms
- problem decomposition
- structured decision making
- reuse strategies
- extreme programming
- collaborative design
- writing tests and modules
- design patterns
- implementation language code
- class libraries
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
An ability to make and honor commitments is fundamental to any engineering
This course will help you to:
- Understand the breakdown of projects into specific deliverables and
- 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
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.
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.