Goal: text input to text output; usually source code.
Stratego does same but can also do AST rewrites.
TXL rewrites with union grammars
Tree grammars + templates
Rewrite only if result is same AST structure else annotate and build other structures then emit code.
TWIG, BURG, etc...
Tom Harwood's JBURG example (partial):
Use TokenRewriteStream to insert/replace/delete rather than create tree and then try to regenerate same thing with comments and whitespace.