- text for this nonterminal was read. The value from YYTABLE is the
- state to go to if the corresponding value in YYCHECK is S.
-
- YYTABLE = a vector filled with portions for different uses, found
- via YYPACT and YYPGOTO.
-
- YYCHECK = a vector indexed in parallel with YYTABLE. It indicates,
- in a roundabout way, the bounds of the portion you are trying to
- examine.
-
- Suppose that the portion of YYTABLE starts at index P and the index
- to be examined within the portion is I. Then if YYCHECK[P+I] != I,
- I is outside the bounds of what is actually allocated, and the
- default (from YYDEFACT or YYDEFGOTO) should be used. Otherwise,
- YYTABLE[P+I] should be used.
-
- YYFINAL = the state number of the termination state. YYFLAG = most
- negative short int. Used to flag ?? */
+ text for this nonterminal was read.
+
+ If YYPGOTO[I] + S is outside the bounds of YYTABLE (from 0 to YYLAST)
+ or if S is outside the bounds of the portion for I (that is,
+ YYCHECK[YYPGOTO[I] + S] != S), then the default state (that is,
+ YYDEFGOTO[I]) should be used instead of YYTABLE. Otherwise,
+ YYTABLE[YYPGOTO[I] + S] is the state to go to even if YYPGOTO[I] < 0.
+
+ When the above YYPACT, YYPGOTO, and YYCHECK tests determine that a
+ value from YYTABLE should be used, that value is never zero, so it is
+ useless to check for zero. When those tests indicate that the value
+ from YYDEFACT or YYDEFGOTO should be used instead, the value from
+ YYTABLE *might* be zero, which, as a consequence of the way in which
+ the tables are constructed, also happens to indicate that YYDEFACT or
+ YYDEFGOTO should be used. However, the YYTABLE value cannot be
+ trusted when the YYDEFACT or YYDEFGOTO value should be used. In
+ summary, forget about zero values in YYTABLE.
+*/