1/* Compute lookahead criteria for bison, 2 3 Copyright (C) 1984, 1986, 1989, 2000, 2002, 2004, 2006-2007, 4 2009-2012 Free Software 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 LALR_H_ 22# define LALR_H_ 23 24# include <bitset.h> 25# include <bitsetv.h> 26 27/* Import the definition of RULE_T. */ 28# include "gram.h" 29 30/* Import the definition of CORE, TRANSITIONS and REDUCTIONS. */ 31# include "state.h" 32 33 34/** Build the LALR(1) automaton. 35 36 Find which rules need lookahead in each state, and which lookahead 37 tokens they accept. 38 39 Also builds: 40 - #goto_map 41 - #from_state 42 - #to_state 43 - #goto_follows 44*/ 45void lalr (void); 46 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 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 74 75/** Release the information related to lookahead tokens. 76 77 Can be performed once the action tables are computed. */ 78void lalr_free (void); 79 80typedef size_t goto_number; 81# define GOTO_NUMBER_MAXIMUM ((goto_number) -1) 82 83/** Index into #from_state and #to_state. 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. */ 88extern goto_number *goto_map; 89 90/** The size of #from_state and #to_state. */ 91extern goto_number ngotos; 92 93/** State number which a transition leads from. */ 94extern state_number *from_state; 95 96/** State number it leads to. */ 97extern state_number *to_state; 98 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 105 106#endif /* !LALR_H_ */ 107