Interesting site on various forms of program transformation : http://www.program-transformation.org/Transform/CategoryPaper

StrategoLanguage is a language for it .