1. A method to perform a software application transformation, comprising: receiving a source grammar comprising a plurality of grammar elements; receiving a rules set comprising a plurality of rules specifying transformations from at least one grammar element of the source grammar into at least one grammar element of the target grammar, wherein each rule of the rules set is configured to maximize semantic equivalence across its respective specified transformation; receiving a target grammar comprising a plurality of grammar elements; receiving a source input containing at least one source code construct in the source grammar; analyzing the received source input; combining the source grammar and target grammar into a composite grammar; generating an abstract syntax tree, based at least on the analyzed source input, wherein the abstract syntax tree represents at least part of the composite grammar wherein at least part of the source grammar and at least part of the target grammar are represented in the composite grammar; and transforming the generated abstract syntax tree based on at least one of the rules of the rules set.