1 /* Subroutines for bison 2 3 Copyright (C) 1984, 1989, 2000-2002, 2007, 2009-2012 Free Software 4 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 CLOSURE_H_ 22 # define CLOSURE_H_ 23 24 # include "gram.h" 25 26 /* Allocates the itemset and ruleset vectors, and precomputes useful 27 data so that closure can be called. n is the number of elements to 28 allocate for itemset. */ 29 30 void new_closure (unsigned int n); 31 32 33 /* Given the kernel (aka core) of a state (a sorted vector of item numbers 34 ITEMS, of length N), set up RULESET and ITEMSET to indicate what 35 rules could be run and which items could be accepted when those 36 items are the active ones. 37 38 RULESET contains a bit for each rule. CLOSURE sets the bits for 39 all rules which could potentially describe the next input to be 40 read. 41 42 ITEMSET is a sorted vector of item numbers; NITEMSET is its size 43 (actually, points to just beyond the end of the part of it that is 44 significant). CLOSURE places there the indices of all items which 45 represent units of input that could arrive next. */ 46 47 void closure (item_number *items, size_t n); 48 49 50 /* Frees ITEMSET, RULESET and internal data. */ 51 52 void free_closure (void); 53 54 extern item_number *itemset; 55 extern size_t nitemset; 56 57 #endif /* !CLOSURE_H_ */ 58