Producing software means transforming a specification of the requirements into an implementation. Automating this process, i.e., generating an implementation from a specification, in ever new ways is the goal of software technology. In several areas this automatization has already been successful. Think of a compiler that translates `specifications' in a high-level programming language to implementations in machine code, or parser generators that generate a parser from a context-free grammar. More recently, program transformation techniques are used to implement compiler optimizations, refactoring tools, aspect weavers, and reverse engineering tools. In this course you learn to understand and apply program transformation techniques used in software generators and study applications of program transformation such as partial evaluation, refactoring, desugaring, and aspect weaving.
The following items roughly correspond to material for a lecture (or two).
- Taxonomy of program transformation (introduction)
- Term rewriting
- Rewriting strategies
- Dynamic rules
- Concrete syntax
- Algebraic simplification
- Data-flow optimization
- Specialization / partial evaluation
The following concepts play an important role in this course. They are discussed
as part of the main topics.
- Manipulation of programs as data
- Source to source transformation
- Algebraic equalities on program expressions
- Pattern matching
- Variable binding
- Lecture notes on Strategies for Program Transformation
- Lab: apply various kinds of program transformations
This course has evolved from
- Software Generation (1999, 2000, 2001, 2001)