Numbering of tokens inside Happy:

epsilon		= 0
error		= 1
dummy		= 2
%start 		= 3..s
non-terminals 	= s..n
terminals 	= n..m
%eof 		= m

where n_nonterminals = n - 3 (including %starts)
      n_terminals    = 1{-error-} + (m-n) + 1{-eof-} (including error and %eof)

In normal and GHC-based parsers, these numbers are also used in the
generated grammar itself, except that the error token is mapped to -1.

In an array-based parser, things are a little different.

-----------------------------------------------------------------------------
Action Table

We have an action table, indexed by states in the y direction, and
terminal number in the x direction.  ie. action = (state * n_terminals +
terminal).  The terminal number is given by (for terminals only):

	tok_number - n_nonterminals - 3

so we have

error		= 0
terminals 	= 1..n
%eof 		= n+1


-----------------------------------------------------------------------------
Goto Table

The goto table is indexed by nonterminal number (without %starts), ie

	(state * (n_nonterminals-s)) + tok_number - s
