Program-Transformation.Org: The Program Transformation Wiki
SORCERER is the tree parser generator of ANTLR.



SORCERER is the tree parser generator for the ANTLR language processing system. SORCERER generates tree walkers from tree grammars. A tree grammar is a BNF like notation for the definition of tree structures. For example, the grammar

exp : #(PLUS exp exp)
    | INT
describes expression trees composed from integers and addition.

Tree translations and transformations are achieved by associating actions with the grammar productions. Translations to textual output are achieved by printing actions. For example, the following grammar prints expressions using infix notation.

exp : #(PLUS exp <<printf("+");>> exp)
    | i:INT <<printf("%d", i);>>
Tree transformations are achieved by reconstructing trees and returning them as results. For example the following grammar transforms expressions by swapping the arguments of the \texttt{PLUS} operator.
exp :! #(PLUS l:exp r:exp) <<#exp = #(PLUS r l);>>
    | INT

Grammar non-terminals can have arguments that can be used in the actions in productions. Non-terminals can also return results. A tree grammar gives rise to a set of mutually recursive functions, one for each non-terminal, that together define a one-pass traversal over a tree. Patterns can be nested and can use regular tree expressions with optionals, alternatives and lists.

Transformation rules in tree grammars are embedded in grammar productions. Separation of rules and strategies and generic tree traversals are not supported in SORCERER.

-- EelcoVisser - 30 Apr 2001