]> git.saurik.com Git - bison.git/blame - src/lalr.h
* GNUmakefile: Switch to coreutils's version.
[bison.git] / src / lalr.h
CommitLineData
742e4900 1/* Compute lookahead criteria for bison,
779e7ceb 2
75ad86ee 3 Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006, 2007 Free Software
779e7ceb 4 Foundation, Inc.
720d742f
AD
5
6 This file is part of Bison, the GNU Compiler Compiler.
7
f16b0819 8 This program is free software: you can redistribute it and/or modify
720d742f 9 it under the terms of the GNU General Public License as published by
f16b0819
PE
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
720d742f 12
f16b0819 13 This program is distributed in the hope that it will be useful,
720d742f
AD
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
f16b0819 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
720d742f
AD
20
21#ifndef LALR_H_
22# define LALR_H_
23
b78d8c23
PE
24# include <bitset.h>
25# include <bitsetv.h>
a70083a3 26
b0299a2e
AD
27/* Import the definition of RULE_T. */
28# include "gram.h"
a70083a3 29
b78d8c23
PE
30/* Import the definition of CORE, TRANSITIONS and REDUCTIONS. */
31# include "state.h"
32
2073e1b6
AD
33
34/** Build the LALR(1) automaton.
35
36 Compute how to make the finite state machine deterministic; find
742e4900 37 which rules need lookahead in each state, and which lookahead
2073e1b6 38 tokens they accept.
720d742f 39
2073e1b6
AD
40 Builds:
41 - #goto_map
42 - #from_state
43 - #to_state
44*/
d33cb3ae 45void lalr (void);
720d742f 46
5967f0cf
JD
47/**
48 * Update state numbers recorded in #goto_map, #from_state, and #to_state such
49 * that:
50 * - \c nstates_old is the old number of states.
51 * - Where \c i is the old state number, <tt>old_to_new[i]</tt> is either:
52 * - \c nstates_old if state \c i is removed because it is unreachable.
53 * Thus, remove all goto entries involving this state.
54 * - The new state number.
55 */
56void lalr_update_state_numbers (state_number old_to_new[],
57 state_number nstates_old);
58
3325ddc4 59
2073e1b6 60/** Release the information related to lookahead tokens.
3325ddc4 61
2073e1b6
AD
62 Can be performed once the action tables are computed. */
63void lalr_free (void);
720d742f 64
720d742f 65
2073e1b6
AD
66typedef size_t goto_number;
67# define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
720d742f 68
2073e1b6 69/** Index into #from_state and #to_state.
43591cec
AD
70
71 All the transitions that accept a particular variable are grouped
72 together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
73 TO_STATE of the first of them. */
b78d8c23 74extern goto_number *goto_map;
2073e1b6
AD
75
76/** State number which a transition leads from. */
b78d8c23 77extern state_number *from_state;
2073e1b6
AD
78
79/** State number it leads to. */
b78d8c23 80extern state_number *to_state;
720d742f 81
720d742f 82
720d742f 83#endif /* !LALR_H_ */