]>
git.saurik.com Git - bison.git/blob - src/tables.h
   1 /* Prepare the LALR and GLR parser tables. 
   2    Copyright (C) 2002, 2004, 2009-2010 Free Software Foundation, Inc. 
   4    This file is part of Bison, the GNU Compiler Compiler. 
   6    This program is free software: you can redistribute it and/or modify 
   7    it under the terms of the GNU General Public License as published by 
   8    the Free Software Foundation, either version 3 of the License, or 
   9    (at your option) any later version. 
  11    This program is distributed in the hope that it will be useful, 
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  14    GNU General Public License for more details. 
  16    You should have received a copy of the GNU General Public License 
  17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
  24 /* The parser tables consist of these tables. 
  26    YYTRANSLATE = vector mapping yylex's token numbers into bison's 
  29    YYTNAME = vector of string-names indexed by bison token number. 
  31    YYTOKNUM = vector of yylex token numbers corresponding to entries 
  34    YYRLINE = vector of line-numbers of all rules.  For yydebug 
  37    YYRHS = vector of items of all rules.  This is exactly what RITEMS 
  38    contains.  For yydebug and for semantic parser. 
  40    YYPRHS[R] = index in YYRHS of first item for rule R. 
  42    YYR1[R] = symbol number of symbol that rule R derives. 
  44    YYR2[R] = number of symbols composing right hand side of rule R. 
  46    YYSTOS[S] = the symbol number of the symbol that leads to state S. 
  48    YYFINAL = the state number of the termination state. 
  50    YYTABLE = a vector filled with portions for different uses, found 
  51    via YYPACT and YYPGOTO, described below. 
  53    YYLAST ( = high) the number of the last element of YYTABLE, i.e., 
  56    YYCHECK = a vector indexed in parallel with YYTABLE.  It indicates, 
  57    in a roundabout way, the bounds of the portion you are trying to 
  60    Suppose that the portion of YYTABLE starts at index P and the index 
  61    to be examined within the portion is I.  Then if YYCHECK[P+I] != I, 
  62    I is outside the bounds of what is actually allocated, and the 
  63    default (from YYDEFACT or YYDEFGOTO) should be used.  Otherwise, 
  64    YYTABLE[P+I] should be used. 
  66    YYDEFACT[S] = default reduction number in state s.  Performed when 
  67    YYTABLE doesn't specify something else to do.  Zero means the default 
  70    YYDEFGOTO[I] = default state to go to after a reduction of a rule 
  71    that generates variable NTOKENS + I, except when YYTABLE specifies 
  74    YYPACT[S] = index in YYTABLE of the portion describing state S. 
  75    The lookahead token's number, I, is used to index that portion of 
  76    YYTABLE to find out what action to perform. 
  78    If YYPACT[S] == YYPACT_NINF, if YYPACT[S] + I is outside the bounds 
  79    of YYTABLE (from 0 to YYLAST), or I is outside the bounds for portion 
  80    S (that is, YYCHECK[YYPACT[S] + I] != I), then the default action 
  81    (that is, YYDEFACT[S]) should be used instead of YYTABLE.  Otherwise, 
  82    the value YYTABLE[YYPACT[S] + I] should be used even if 
  85    If the value in YYTABLE is positive, we shift the token and go to 
  88    If the value is negative, it is minus a rule number to reduce by. 
  90    If the value is YYTABLE_NINF, it's a syntax error. 
  92    YYPGOTO[I] = the index in YYTABLE of the portion describing what to 
  93    do after reducing a rule that derives variable I + NTOKENS.  This 
  94    portion is indexed by the parser state number, S, as of before the 
  95    text for this nonterminal was read. 
  97    If YYPGOTO[I] + S is outside the bounds of YYTABLE (from 0 to YYLAST) 
  98    or if S is outside the bounds of the portion for I (that is, 
  99    YYCHECK[YYPGOTO[I] + S] != S), then the default state (that is, 
 100    YYDEFGOTO[I]) should be used instead of YYTABLE.  Otherwise, 
 101    YYTABLE[YYPGOTO[I] + S] is the state to go to even if YYPGOTO[I] < 0. 
 103    When the above YYPACT, YYPGOTO, and YYCHECK tests determine that a 
 104    value from YYTABLE should be used, that value is never zero, so it is 
 105    useless to check for zero.  When those tests indicate that the value 
 106    from YYDEFACT or YYDEFGOTO should be used instead, the value from 
 107    YYTABLE *might* be zero, which, as a consequence of the way in which 
 108    the tables are constructed, also happens to indicate that YYDEFACT or 
 109    YYDEFGOTO should be used.  However, the YYTABLE value cannot be 
 110    trusted when the YYDEFACT or YYDEFGOTO value should be used.  In 
 111    summary, forget about zero values in YYTABLE. 
 116 typedef int base_number
; 
 117 extern base_number 
*base
; 
 118 /* A distinguished value of BASE, negative infinite.  During the 
 119    computation equals to BASE_MINIMUM, later mapped to BASE_NINF to 
 120    keep parser tables small.  */ 
 121 extern base_number base_ninf
; 
 123 extern unsigned int *conflict_table
; 
 124 extern unsigned int *conflict_list
; 
 125 extern int conflict_list_cnt
; 
 127 extern base_number 
*table
; 
 128 extern base_number 
*check
; 
 129 /* The value used in TABLE to denote explicit syntax errors 
 130    (%nonassoc), a negative infinite.  */ 
 131 extern base_number table_ninf
; 
 133 extern state_number 
*yydefgoto
; 
 134 extern rule_number 
*yydefact
; 
 137 void tables_generate (void); 
 138 void tables_free (void); 
 140 #endif /* !TABLES_H_ */