|
|
|
Course Description - CSCE 425/825
Purpose:
The course will teach modern compiler techniques
applied to general-purpose programming language.
The goal of the course is to give students a working knowledge of the foundations,
tools, and engineering approaches used in developing formal language translators.
The emphasis is on the construction of compilers to position students to build
translators for little languages in their careers.
Contents:
Lexical analysis:lexemes, tokenization, and common patterns
Syntactic analysis:LL and LR parsing and the ANTLR tool
Semantic analysis: abstract syntax trees, symbol tables, type checking,
resource allocation
Static analysis:control flow, data flow analysis and frameworks
Virtual machines and run-time environments: stacks, heaps, objects.
Code generation: resources, templates, optimizations.
Surveys on: garbage collection, native code generation.
Outcomes:
By studying the course contents and engaging in the practice of
compiler development through course projects, students will master
the topics of lexical and syntactic specification, the use of front-end
generator tools, techniques for enforcing semantic and type rules of a language,
data structures representing source program data for analysis and code generation,
and approaches to generating target programs for modern virtual machines.
Students will also gain a significant degree of familiarity with techniques
for implementing program analyses and optimizing transformations. They will
also be exposed to garbage collection and issues in native code generaion.
Text Book:
We have chosen Compilers : Principles, Techniques, & Tools, by
Aho, Lam, Sethi and Ullman (aka "the purple dragon book")
for the following reasons:
- it is the most comprehensive treatment of compiling
available. It will serve as an excellent introduction to compiling as well as a resource
throughout your career;
- it covers static analysis,
optimizations and other advanced topics used for compiling modern languages.
Many other texts only give brief coverage of those topics, but in this course we'll
dig deeper.
|
 |
Schedule:
Lectures: 2.5 hours/week. TU 12:30-13:45, Avery 108
Office Hours: Instructor: Wed 11:00am-noon, 365 Avery
Prerequisites:
CIS 310, 322
Marking Scheme:
Course Projects (50%)
Quizzes (25%)
Final Exam (25%)
Graduate students will be required to complete an additional course project.
Lecturer:
Matthew Dwyer, Avery 365
Credits:
3 credits
Philosophy:
This course is based on a course that was originally designed
by
Laurie Hendren and Michael I.
Schwartzbach which has been taught at a number of universities
over the past decade. The course received a significant update by Robby and Matthew Dwyer in
2005 with respect to the projects and the tools that are used for compiler
implementation; this update achieves a modernization of compiler
construction technologies.
This is primarily an introductory
compiling course that has been designed to recognize that most
people will not build a large application like a compiler from
scratch and that people learn by doing.
Towards this end
the project for the course involves the enhancement of an existing
compiler code base. Students will be given a working compiler and
will be required to extend it in significant ways. This will give
them insights into how a compiler is designed and written that
they can leverage for their enhancements.
While serving this purpose, the course does present significantly
more content on static analysis than is typically found in an
undergraduate compiling course; thus it can serve as an effective
introduction on advanced topics for graduate students.
|