%nonassoc declaration to
declare a token and specify its precedence and associativity, all at
once. These are called precedence declarations.
See Operator Precedence, for general information on
The syntax of a precedence declaration is nearly the same as that of
%left <type> symbols...
And indeed any of these declarations serves the purposes of
But in addition, they specify the associativity and relative precedence for
all the symbols:
%leftspecifies left-associativity (grouping x with y first) and
%rightspecifies right-associativity (grouping y with z first).
%nonassocspecifies no associativity, which means that ‘x op y op z’ is considered a syntax error.
For backward compatibility, there is a confusing difference between the
argument lists of
%token and precedence declarations.
%token can associate a literal string with a token type name.
A precedence declaration always interprets a literal string as a reference to a
%left OR "<=" // Does not declare an alias. %left OR 134 "<=" 135 // Declares 134 for OR and 135 for "<=".