The realization of model-driven software development requires effective techniques for implementing code generators for domain-specific
languages. This paper identifies techniques for improving separation of concerns in the implementation of generators. The
core technique is code generation by model transformation, that is, the generation of a structured representation (model) of the target program instead of plain text. This approach
enables the transformation of code after generation, which in turn enables the extension of the target language with features
that allow better modularity in code generation rules. The technique can also be applied to ‘internal code generation’ for
the translation of high-level extensions of a DSL to lower-level constructs within the same DSL using model-to-model transformations.
This paper refines our earlier description of code generation by model transformation with an improved architecture for the
composition of model-to-model normalization rules, solving the problem of combining type analysis and transformation. Instead
of coarse-grained stages that alternate between normalization and type analysis, we have developed a new style of type analysis
that can be integrated with normalizing transformations in a fine-grained manner. The normalization strategy has a simple
extension interface and integrates non-local, context-sensitive transformation rules. We have applied the techniques in a
realistic case study of domain-specific language engineering, i.e. the code generator for WebDSL, using Stratego, a high-level
transformation language that integrates model-to-model, model-to-code, and code-to-code transformations.
Keywords Transformation - Transformation engineering - Term rewriting - Webapplication DSL - Combination of analysis and transformation
Communicated by Jeff Gray, Alfonso Pierantonio, and Antonio Vallecillo.