Declarative rewriting through circular nonterminal attributes. (December 2015)