Rewriting terms (tree structured values, e.g. parts of an AbstractSyntaxTree) by replacing parts with other parts by repeated applications of rewrite rules (forming a TermRewriteSystem?).
Used in compiler implementation.
See http://en.wikipedia.org/wiki/Term_rewriting