1. A method to perform a software application transformation, comprising: receiving a source grammar comprising a plurality of source grammar elements of a source application, the source grammar specifying syntactic rules governing a source programming language; receiving a plurality of target grammars comprising a plurality of target grammar elements of a transformed application, the plurality of target grammars comprising different target grammars of multiple target programming languages, each of the plurality of target grammars specifying syntactic rules governing a corresponding target programming language; receiving a rules set comprising a plurality of rules specifying transformations from at least one source grammar element into at least one target grammar element, wherein each rule of the rules set is configured to maximize semantic equivalence across a respective specified transformation of one or more source grammar elements of a source programming language into one or more target grammar elements of a target programming language; receiving a source input containing at least one source code construct in the source grammar; analyzing, using at least one processor, the received source input to determine a structure for an abstract syntax tree; creating, using the at least one processor, a composite grammar that includes the source grammar of the source programming language and the plurality of target grammars of the multiple target programming languages; generating, using the at least one processor, the abstract syntax tree based at least on the source input and at least a portion of the composite grammar such that, the abstract syntax tree represents at least one part of the source grammar of the source programming language, and at least one part of a first target grammar of a first target programming language and at least one part of a second target grammar of a second target programming language from the composite grammar, the first target grammar being different than the second target grammar; and transforming, using the at least one processor, the generated abstract syntax tree based on one or more rules of the rules set.