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 */ 45 void lalr (void); 46 47 /** 48 * Set #nLA and allocate all reduction lookahead sets. Normally invoked by 49 * #lalr. 50 */ 51 void initialize_LA (void); 52 53 /** 54 * Build only: 55 * - #goto_map 56 * - #from_state 57 * - #to_state 58 * Normally invoked by #lalr. 59 */ 60 void 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 */ 71 void 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. */ 78 void lalr_free (void); 79 80 typedef 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. */ 88 extern goto_number *goto_map; 89 90 /** The size of #from_state and #to_state. */ 91 extern goto_number ngotos; 92 93 /** State number which a transition leads from. */ 94 extern state_number *from_state; 95 96 /** State number it leads to. */ 97 extern state_number *to_state; 98 99 /** Map a state/symbol pair into its numeric representation. */ 100 goto_number map_goto (state_number s0, symbol_number sym); 101 102 /* goto_follows[i] is the set of tokens following goto i. */ 103 extern bitsetv goto_follows; 104 105 106 #endif /* !LALR_H_ */ 107