CSC444
Instructor: Doug Lea
Class: T-Th: 8am
Office/Lab hours: T-W-Th 11:00am-12:30pm.
Prereqs: CSC344 (365 and 322 strongly encouraged)
Course home page: http://gee.cs.oswego.edu/dl/csc444
Overview
The design and implementation of programming language compilers
performing parsing, analysis of program representations, code
generation, optimization, and language run-time support; with
applications to related tools including intepretors, static
analyzers, development environments, and virtual machines.
Topics
- Parsing: Tokenization of regular languages; top-down and
bottom up parsing of context-free languages
- Static analysis: Abstract Syntax trees; type checking and
static semantics checking
- Properties of target platforms, including architectures,
procedure conventions, initialization, memory management, run-time
support.
- Code generation: Mapping instructions and storage to
processors; virtual machine representations;
- Optimization: Data flow graphs; forward, backward, and
iterative techniques
Outcomes
Upon completion of this course, students will demonstrate ability to:
- [Design] Choose among relevant approaches, techniques, and
tools for parsing, static analysis, code generation,
optimization, and run-time support.
- [Development] Design, implement, and test a compiler for a
small language.
Textbook
Compilers: Principles,
Techniques, and Tools, by Aho, Lam, Sethi, and Ullman.
Addison-Wesley, 2007, ISBN-10: 0321486811
This is the reference-quality "Dragon book" providing definitive
treatments of most topics in compilation.
Links to online readings and materials
Links to optional readings
Software links
Requirements
Subject to minor change:
- Two exams (25%)
- Exam questions mainly cover the theory of operation of
parsing, analysis, code generation, optimization, and run-time
support.
- Exercises (10%)
- two short assigments
- Project (65%)
- A compiler for a small language, submitted in approximately
4 parts
- Create a parser for your dialect of Minijava using any
parser generator tool or framework. Include evidence of
successful parse of all Minijava sample programs as well
as at least three examples with your
extensions. Demonstrate appropriate user error handling,
and (partial) recovery using synchronizing tokens, using
test programs with syntax errors.
- Add symbol resolution and type-checking. Create unit
tests and include results for cases of expression and
invocation errors, duplicate declarations, overload/override
errors, and illegal inheritance.
- Generate and run code for all of the sample programs.
- (Optional) Use an optimization framework to add an
optimization and regenerate and run sample programs.
Campus references
See
the
CS and College course policies and resources.
If you have a disabling condition, which may interfere with your
ability to successfully complete this course, please contact the
Office of Disability Services.
SUNY Oswego is committed to Intellectual Integrity. Any form of
intellectual dishonesty is a serious concern and therefore prohibited.
The full policy can be found at http://www.oswego.edu/integrity
Doug Lea