]>
git.saurik.com Git - bison.git/blob - src/lalr.h
77a5d9df7d4a461c1fb1e824cd3ebb8f2d84490e
   1 /* Compute look-ahead criteria for bison, 
   2    Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc. 
   4    This file is part of Bison, the GNU Compiler Compiler. 
   6    Bison 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 2, or (at your option) 
  11    Bison 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. 
  16    You should have received a copy of the GNU General Public License 
  17    along with Bison; see the file COPYING.  If not, write to 
  18    the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
  19    Boston, MA 02111-1307, USA.  */ 
  25 /* Import the definition of CORE, SHIFTS and REDUCTIONS. */ 
  29 /* Compute how to make the finite state machine deterministic; find 
  30    which rules need lookahead in each state, and which lookahead 
  31    tokens they accept.  */ 
  33 void lalr 
PARAMS ((void)); 
  36 /* lalr() builds these data structures. */ 
  38 /* GOTO_MAP, FROM_STATE and TO_STATE -- record each shift transition 
  39    which accepts a variable (a nonterminal). 
  41    FROM_STATE[T] -- state number which a transition leads from. 
  42    TO_STATE[T] -- state number it leads to. 
  44    All the transitions that accept a particular variable are grouped 
  45    together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and 
  46    TO_STATE of the first of them.  */ 
  48 extern short *goto_map
; 
  49 extern short *from_state
; 
  50 extern short *to_state
; 
  52 /* LARULENO is a vector which records the rules that need lookahead in 
  53    various states.  The elements of LARULENO that apply to state S are 
  54    those from LOOKAHEADS[S] through LOOKAHEADS[S+1]-1.  Each element 
  55    of LARULENO is a rule number. 
  57    If LR is the length of LAruleno, then a number from 0 to LR-1 can 
  58    specify both a rule and a state where the rule might be applied. 
  61 extern short *LAruleno
; 
  63 /* LA is a lr by ntokens matrix of bits.  LA[l, i] is 1 if the rule 
  64    LAruleno[l] is applicable in the appropriate state when the next 
  65    token is symbol i.  If LA[l, i] and LA[l, j] are both 1 for i != j, 
  69 #define LA(Rule) (LA + (Rule) * tokensetsize) 
  72 /* All the states, indexed by the state number.  */ 
  73 extern state_t 
**states
; 
  75 extern int tokensetsize
;