1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Subroutines for bison
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Foundation, Inc.
5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   This file is part of Bison, the GNU Compiler Compiler.
7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is free software; you can redistribute it and/or modify it
9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   under the terms of the GNU General Public License as published by
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   the Free Software Foundation; either version 2, or (at your option)
11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   any later version.
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Bison is distributed in the hope that it will be useful, but
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   WITHOUT ANY WARRANTY; without even the implied warranty of
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   General Public License for more details.
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   You should have received a copy of the GNU General Public License
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   along with Bison; see the file COPYING.  If not, write to the Free
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   02110-1301, USA.  */
22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef CLOSURE_H_
24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define CLOSURE_H_
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include "gram.h"
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Allocates the itemset and ruleset vectors, and precomputes useful
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   data so that closure can be called.  n is the number of elements to
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   allocate for itemset.  */
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid new_closure (unsigned int n);
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Given the kernel (aka core) of a state (a vector of item numbers
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   ITEMS, of length N), set up RULESET and ITEMSET to indicate what
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   rules could be run and which items could be accepted when those
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   items are the active ones.
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   RULESET contains a bit for each rule.  CLOSURE sets the bits for
41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   all rules which could potentially describe the next input to be
42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   read.
43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   ITEMSET is a vector of item numbers; NITEMSET is its size
45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   (actually, points to just beyond the end of the part of it that is
46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   significant).  CLOSURE places there the indices of all items which
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   represent units of input that could arrive next.  */
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid closure (item_number *items, size_t n);
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Frees ITEMSET, RULESET and internal data.  */
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid free_closure (void);
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern item_number *itemset;
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern size_t nritemset;
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* !CLOSURE_H_ */
60