There are a number of features for disambiguation in SDF2.
Associativity
Associativity declarations are used to solve ambiguities of an operator with respect to itself. For example, the production
Exp "+" Exp -> Exp {left}
is annotated with the attribute 'left' which entails that addition is left
associative with respect to itself, i.e., a + b + c should be read as (a + b) + c.
Priorities
Priorities can be used to solve ambiguities between operators. For example,
the priority declaration
Exp "*" Exp -> Exp > Exp "+" Exp -> Exp
declares multiplication to have higher priority than addition.
Reject Productions
Reject productions are used to exclude some phrases from a sort. The standard
application is the exclusion of keywords from lexical sorts. For example,
the reject production
"if" -> Id {reject}
excludes 'if' as an identifier.
Restrictions
Follow restrictions are used to declare that some sort cannot be followed
by some characters. For instance, the restriction
Id -/- [a-z]
declares that phrases of the sort Id cannot be followed by lower case letters.
Other Disambiguation Methods