+ Numbers 0 to NTOKENS - 1 are for tokens, and NTOKENS to NSYMS - 1
+ are for variables. Symbol number zero is the end-of-input token.
+ This token is counted in ntokens. The true number of token values
+ assigned is NTOKENS reduced by one for each alias declaration.
+
+ The rules receive rule numbers 1 to NRULES in the order they are
+ written. More precisely Bison augments the grammar with the
+ initial rule, `$accept: START-SYMBOL $end', which is numbered 1,
+ all the user rules are 2, 3 etc. Each time a rule number is
+ presented to the user, we subtract 1, so *displayed* rule numbers
+ are 0, 1, 2...
+
+ Internally, we cannot use the number 0 for a rule because for
+ instance RITEM stores both symbol (the RHS) and rule numbers: the
+ symbols are shorts >= 0, and rule number are stored negative.
+ Therefore 0 cannot be used, since it would be both the rule number
+ 0, and the token $end).
+
+ Actions are accessed via the rule number.
+
+ The rules themselves are described by several arrays: amongst which
+ RITEM, and RULES.
+
+ RULES is an array of rules, whose members are:
+
+ RULES[R].lhs -- the symbol of the left hand side of rule R.
+
+ RULES[R].rhs -- the index in RITEM of the beginning of the portion
+ for rule R.
+
+ RULES[R].prec -- the symbol providing the precedence level of R.
+
+ RULES[R].precsym -- the symbol attached (via %prec) to give its
+ precedence to R. Of course, if set, it is equal to `prec', but we
+ need to distinguish one from the other when reducing: a symbol used
+ in a %prec is not useless.
+
+ RULES[R].assoc -- the associativity of R.
+
+ RULES[R].dprec -- the dynamic precedence level of R (for GLR
+ parsing).