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