+ 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, `$axiom: START-SYMBOL EOF', 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 EOF).
+
+ Actions and guards are accessed via the rule number.
+
+ The rules themselves are described by several arrays: amongst which
+ RITEM, and RULES.
+
+ RULES is an array of struct rule_s, which members are:
+
+ RULES[R].lhs -- the symbol number of the left hand side of rule R.
+ If -1, the rule has been thrown out by reduce.c and should be
+ ignored.
+
+ RULES[R].rhs -- the index in RITEM of the beginning of the portion
+ for rule R.
+
+ RULES[R].prec -- the precedence level of R.
+
+ RULES[R].precsym -- the symbol-number of the symbol in %prec for R
+ (if any).
+
+ RULES[R].assoc -- the associativity of R.