]> git.saurik.com Git - bison.git/blame - src/lalr.h
doc: create a new Tuning LR section in the manual.
[bison.git] / src / lalr.h
CommitLineData
742e4900 1/* Compute lookahead criteria for bison,
779e7ceb 2
ea0a7676
JD
3 Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006-2007,
4 2009-2011 Free Software 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
1c4ad777 36 Find which rules need lookahead in each state, and which lookahead
2073e1b6 37 tokens they accept.
720d742f 38
f805dfcb
JD
39 Also builds:
40 - #goto_map
41 - #from_state
42 - #to_state
43 - #goto_follows
2073e1b6 44*/
d33cb3ae 45void lalr (void);
720d742f 46
f805dfcb
JD
47/**
48 * Set #nLA and allocate all reduction lookahead sets. Normally invoked by
49 * #lalr.
50 */
51void initialize_LA (void);
52
53/**
54 * Build only:
55 * - #goto_map
56 * - #from_state
57 * - #to_state
58 * Normally invoked by #lalr.
59 */
60void set_goto_map (void);
61
5967f0cf
JD
62/**
63 * Update state numbers recorded in #goto_map, #from_state, and #to_state such
64 * that:
65 * - \c nstates_old is the old number of states.
66 * - Where \c i is the old state number, <tt>old_to_new[i]</tt> is either:
67 * - \c nstates_old if state \c i is removed because it is unreachable.
68 * Thus, remove all goto entries involving this state.
69 * - The new state number.
70 */
71void lalr_update_state_numbers (state_number old_to_new[],
72 state_number nstates_old);
73
3325ddc4 74
2073e1b6 75/** Release the information related to lookahead tokens.
3325ddc4 76
2073e1b6
AD
77 Can be performed once the action tables are computed. */
78void lalr_free (void);
720d742f 79
2073e1b6
AD
80typedef size_t goto_number;
81# define GOTO_NUMBER_MAXIMUM ((goto_number) -1)
720d742f 82
2073e1b6 83/** Index into #from_state and #to_state.
43591cec
AD
84
85 All the transitions that accept a particular variable are grouped
86 together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and
87 TO_STATE of the first of them. */
b78d8c23 88extern goto_number *goto_map;
2073e1b6 89
f805dfcb
JD
90/** The size of #from_state and #to_state. */
91extern goto_number ngotos;
92
93/** State number which a transition leads from. */
b78d8c23 94extern state_number *from_state;
2073e1b6
AD
95
96/** State number it leads to. */
b78d8c23 97extern state_number *to_state;
720d742f 98
f805dfcb
JD
99/** Map a state/symbol pair into its numeric representation. */
100goto_number map_goto (state_number s0, symbol_number sym);
101
102/* goto_follows[i] is the set of tokens following goto i. */
103extern bitsetv goto_follows;
104
720d742f 105
720d742f 106#endif /* !LALR_H_ */