Software Language Engineering - Czarnecki (Springer Berlin Heidelberg, 2013)