Types data Tree
= appl(Production prod, list[Tree] args)
| cycle(Symbol symbol, int cycleLength)
| amb(set[Tree] alternatives)
| char(int character)
;
data Production
= prod(Symbol def, list[Symbol] symbols, set[Attr] attributes)
| regular(Symbol def)
| error(Production prod, int dot)
| skipped()
;
data Attr
= \assoc(Associativity \assoc)
| \bracket()
;
data Associativity
= \left()
| \right()
| \assoc()
| \non-assoc()
;
data CharRange = range(int begin, int end)
;
alias CharClass = list[CharRange]
;
data Symbol = \start(Symbol symbol)
;
data Symbol
= \sort(str name)
| \lex(str name)
| \layouts(str name)
| \keywords(str name)
| \parameterized-sort(str name, list[Symbol] parameters)
| \parameterized-lex(str name, list[Symbol] parameters)
;