Building families of languages for model-driven system development