CSCE 425/825 - Compiler Construction


CSCE 425/825
Course Home Page
Course Description
Calendar
Project Upload
Resources
Project
Java
ANTLR
JVM and ASM
Eclipse and Plugins

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.