Next: Union Decl, Previous: Token Decl, Up: Declarations
Use the %left, %right or %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
operator precedence.
The syntax of a precedence declaration is nearly the same as that of
%token: either
%left symbols...
or
%left <type> symbols...
And indeed any of these declarations serves the purposes of %token.
But in addition, they specify the associativity and relative precedence for
all the symbols:
%left specifies
left-associativity (grouping x with y first) and
%right specifies right-associativity (grouping y with
z first). %nonassoc specifies 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.
Only a %token can associate a literal string with a token type name.
A precedence declaration always interprets a literal string as a reference to a
separate token.
For example:
%left OR "<=" // Does not declare an alias.
%left OR 134 "<=" 135 // Declares 134 for OR and 135 for "<=".