]> git.saurik.com Git - bison.git/blob - src/tables.h
b0fbe9ac4d79a08e639a4a829b1206b9709ba00a
[bison.git] / src / tables.h
1 /* Prepare the LALR and GLR parser tables.
2 Copyright (C) 2002, 2004 Free Software Foundation, Inc.
3
4 This file is part of Bison, the GNU Compiler Compiler.
5
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.
10
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.
15
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/>. */
18
19 #ifndef TABLES_H_
20 # define TABLES_H_
21
22 # include "state.h"
23
24 /* The parser tables consist of these tables.
25
26 YYTRANSLATE = vector mapping yylex's token numbers into bison's
27 token numbers.
28
29 YYTNAME = vector of string-names indexed by bison token number.
30
31 YYTOKNUM = vector of yylex token numbers corresponding to entries
32 in YYTNAME.
33
34 YYRLINE = vector of line-numbers of all rules. For yydebug
35 printouts.
36
37 YYRHS = vector of items of all rules. This is exactly what RITEMS
38 contains. For yydebug and for semantic parser.
39
40 YYPRHS[R] = index in YYRHS of first item for rule R.
41
42 YYR1[R] = symbol number of symbol that rule R derives.
43
44 YYR2[R] = number of symbols composing right hand side of rule R.
45
46 YYSTOS[S] = the symbol number of the symbol that leads to state S.
47
48 YYDEFACT[S] = default rule to reduce with in state s, when YYTABLE
49 doesn't specify something else to do. Zero means the default is an
50 error.
51
52 YYDEFGOTO[I] = default state to go to after a reduction of a rule
53 that generates variable NTOKENS + I, except when YYTABLE specifies
54 something else to do.
55
56 YYPACT[S] = index in YYTABLE of the portion describing state S.
57 The lookahead token's type is used to index that portion to find
58 out what to do.
59
60 If the value in YYTABLE is positive, we shift the token and go to
61 that state.
62
63 If the value is negative, it is minus a rule number to reduce by.
64
65 If the value is zero, the default action from YYDEFACT[S] is used.
66
67 YYPGOTO[I] = the index in YYTABLE of the portion describing what to
68 do after reducing a rule that derives variable I + NTOKENS. This
69 portion is indexed by the parser state number, S, as of before the
70 text for this nonterminal was read. The value from YYTABLE is the
71 state to go to if the corresponding value in YYCHECK is S.
72
73 YYTABLE = a vector filled with portions for different uses, found
74 via YYPACT and YYPGOTO.
75
76 YYCHECK = a vector indexed in parallel with YYTABLE. It indicates,
77 in a roundabout way, the bounds of the portion you are trying to
78 examine.
79
80 Suppose that the portion of YYTABLE starts at index P and the index
81 to be examined within the portion is I. Then if YYCHECK[P+I] != I,
82 I is outside the bounds of what is actually allocated, and the
83 default (from YYDEFACT or YYDEFGOTO) should be used. Otherwise,
84 YYTABLE[P+I] should be used.
85
86 YYFINAL = the state number of the termination state.
87
88 YYLAST ( = high) the number of the last element of YYTABLE, i.e.,
89 sizeof (YYTABLE) - 1. */
90
91 extern int nvectors;
92
93 typedef int base_number;
94 extern base_number *base;
95 /* A distinguished value of BASE, negative infinite. During the
96 computation equals to BASE_MINIMUM, later mapped to BASE_NINF to
97 keep parser tables small. */
98 extern base_number base_ninf;
99
100 extern unsigned int *conflict_table;
101 extern unsigned int *conflict_list;
102 extern int conflict_list_cnt;
103
104 extern base_number *table;
105 extern base_number *check;
106 /* The value used in TABLE to denote explicit syntax errors
107 (%nonassoc), a negative infinite. */
108 extern base_number table_ninf;
109
110 extern state_number *yydefgoto;
111 extern rule_number *yydefact;
112 extern int high;
113
114 void tables_generate (void);
115 void tables_free (void);
116
117 #endif /* !TABLES_H_ */