Contact: Malte Appeltauer
GenTL is a program transformation language. Program transformation, the act of changing one program into another, is one of the most fundamental activities of software development. Automated program transformation helps software engineers manage the complexity and continuous evolution of modern software projects. In particular, tools that treat transformations as first class entities let programmers quickly define transformations that suit their needs.
Depending on their formal foundations these tools can be roughly classified as based on term rewriting (e.g., Stratego, HATS, ASF+SDF ), graph transformation , or logic (e.g., SOUL, TyRuBa, JTransformer).
GenTL is a logic-based transformation language. It offers:
High-level CTs GenTL supports conditional transformations and conditional transformation sequences as first-class language constructs.
Logic based analysis Self-defined, side-effect free predicates can be used to express arbitrary program analyzes for CT preconditions. In these predicates, concrete syntax patterns can be used to select elements of base programs.
Generic transformations Concrete syntax patterns containing meta-variables can be used uniformly in predicates and transformations. The use of the same metavariables links preconditions and transformations in ct declarations.
This design provides benefits in terms of reduced dependencies on transformed programs and increased reusability of transformation specifications. Because the meta-variable values are determined by evaluation of predicates and preconditions can share meta-variables with transformations, it is possible to define analyses and transformations without referring to concrete instances, e.g., identifier or types of program elements. This leads to very generic and reusable transformation specifications. In addition, GenTL provides reusability of the elements used in analyses and transformations. Predicates encapsulate program analyses that can be reused in different preconditions. The generate declarataion encapsulates concrete syntax based templates for the code to be generated by transformations.