-- Copyright (c) 1990 Regents of the University of California.
-- All rights reserved.
--
--    The primary authors of ayacc were David Taback and Deepak Tolani.
--    Enhancements were made by Ronald J. Schmalz.
--
--    Send requests for ayacc information to ayacc-info@ics.uci.edu
--    Send bug reports for ayacc to ayacc-bugs@ics.uci.edu
--
-- Redistribution and use in source and binary forms are permitted
-- provided that the above copyright notice and this paragraph are
-- duplicated in all such forms and that any documentation,
-- advertising materials, and other materials related to such
-- distribution and use acknowledge that the software was developed
-- by the University of California, Irvine.  The name of the
-- University may not be used to endorse or promote products derived
-- from this software without specific prior written permission.
-- THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

-- Module       : symbol_info.ada
-- Component of : ayacc
-- Version      : 1.2
-- Date         : 11/21/86  12:37:08
-- SCCS File    : disk21~/rschm/hasee/sccs/ayacc/sccs/sxsymbol_info.ada

-- $Header: symbol_info.a,v 0.1 86/04/01 15:13:15 ada Exp $
-- $Log:        symbol_info.a,v $
-- Revision 0.1  86/04/01  15:13:15  ada
--  This version fixes some minor bugs with empty grammars
--  and $$ expansion. It also uses vads5.1b enhancements
--  such as pragma inline.
--
--
-- Revision 0.0  86/02/19  18:42:36  ada
--
-- These files comprise the initial version of Ayacc
-- designed and implemented by David Taback and Deepak Tolani.
-- Ayacc has been compiled and tested under the Verdix Ada compiler
-- version 4.06 on a vax 11/750 running Unix 4.2BSD.
--

with Symbol_Table, Rule_Table;
use Symbol_Table, Rule_Table;
package Symbol_Info is

   --
   --  The following array declarations are used to compute the
   --  the rules that have a particular symbol on the left hand
   --  side. NONTERMINAL_YIELD contains the rules and
   --  NONTERMINAL_YIELD_OFFSET contains the offset into the first array
   --  indexed by a particular nonterminal.  The user of this package
   --  should not attempt to alter the contents of these arrays. They
   --  are visible in the spec only for efficiency reasons.
   --
   type Yield_Index is new Integer;
   type Rule_Array is array (Yield_Index range <>) of Rule;
   type Offset_Array is array (Grammar_Symbol range <>) of Yield_Index;

   type Rule_Array_Pointer is access Rule_Array;
   type Offset_Array_Pointer is access Offset_Array;

   Nonterminal_Yield       : Rule_Array_Pointer;
   Nonterminal_Yield_Index : Offset_Array_Pointer;

   ---

   procedure Initialize;

   function Is_Nullable (Sym : Grammar_Symbol) return Boolean;

   Undefined_Nonterminal : exception;
   -- raised if a nonterminal doesn't appear on left hand side of
   -- any rule.

--RJS    pragma inline(is_nullable);

end Symbol_Info;
