]>
git.saurik.com Git - bison.git/blob - src/tables.h
9b52f092f9508e81a4f985c5a87e228a8e28dcd0
1 /* Prepare the LALR and GLR parser tables.
2 Copyright (C) 2002, 2004, 2009 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.
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 zero or 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.
106 typedef int base_number
;
107 extern base_number
*base
;
108 /* A distinguished value of BASE, negative infinite. During the
109 computation equals to BASE_MINIMUM, later mapped to BASE_NINF to
110 keep parser tables small. */
111 extern base_number base_ninf
;
113 extern unsigned int *conflict_table
;
114 extern unsigned int *conflict_list
;
115 extern int conflict_list_cnt
;
117 extern base_number
*table
;
118 extern base_number
*check
;
119 /* The value used in TABLE to denote explicit syntax errors
120 (%nonassoc), a negative infinite. */
121 extern base_number table_ninf
;
123 extern state_number
*yydefgoto
;
124 extern rule_number
*yydefact
;
127 void tables_generate (void);
128 void tables_free (void);
130 #endif /* !TABLES_H_ */