1 /* Lists of symbols for Bison 
   3    Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc. 
   5    This file is part of Bison, the GNU Compiler Compiler. 
   7    Bison is free software; you can redistribute it and/or modify 
   8    it under the terms of the GNU General Public License as published by 
   9    the Free Software Foundation; either version 2, or (at your option) 
  12    Bison is distributed in the hope that it will be useful, 
  13    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  15    GNU General Public License for more details. 
  17    You should have received a copy of the GNU General Public License 
  18    along with Bison; see the file COPYING.  If not, write to 
  19    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
  20    Boston, MA 02110-1301, USA.  */ 
  25 # include "location.h" 
  28 /* A list of symbols, used during the parsing to store the rules.  */ 
  29 typedef struct symbol_list
 
  32    * Whether this node contains a symbol, a semantic type, or a 
  33    * \c \%symbol-default. 
  35   enum { SYMLIST_SYMBOL
, SYMLIST_TYPE
, SYMLIST_DEFAULT 
} content_type
; 
  37     /** The symbol or \c NULL iff <tt>node_type = SYMLIST_SYMBOL</tt>.  */ 
  39     /** The semantic type iff <tt>node_type = SYMLIST_TYPE</tt>.  */ 
  44   /* If this symbol is the generated lhs for a midrule but this is the rule in 
  45      whose rhs it appears, MIDRULE = a pointer to that midrule.  */ 
  46   struct symbol_list 
*midrule
; 
  48   /* If this symbol is the generated lhs for a midrule and this is that 
  49      midrule, MIDRULE_PARENT_RULE = a pointer to the rule in whose rhs it 
  50      appears, and MIDRULE_PARENT_RHS_INDEX = its rhs index (1-origin) in the 
  52   struct symbol_list 
*midrule_parent_rule
; 
  53   int midrule_parent_rhs_index
; 
  55   /* The action is attached to the LHS of a rule. */ 
  57   location action_location
; 
  59   /* Whether this symbol's value is used in the current action.  */ 
  62   /* Precedence/associativity.  */ 
  66   location merger_declaration_location
; 
  69   struct symbol_list 
*next
; 
  73 /** Create a list containing \c sym at \c loc.  */ 
  74 symbol_list 
*symbol_list_sym_new (symbol 
*sym
, location loc
); 
  76 /** Create a list containing \c type_name at \c loc.  */ 
  77 symbol_list 
*symbol_list_type_new (uniqstr type_name
, location loc
); 
  79 /** Create a list containing a \c \%symbol-default at \c loc.  */ 
  80 symbol_list 
*symbol_list_default_new (location loc
); 
  84   \pre For every node \c n in the list, <tt>n->content_type = 
  85   SYMLIST_SYMBOL</tt>.  */ 
  86 void symbol_list_syms_print (const symbol_list 
*l
, FILE *f
); 
  88 /** Prepend \c node to \c list.  */ 
  89 symbol_list 
*symbol_list_prepend (symbol_list 
*list
, symbol_list 
*node
); 
  91 /** Free \c list, but not the items it contains.  */ 
  92 void symbol_list_free (symbol_list 
*list
); 
  94 /** Return the length of \c l. */ 
  95 int symbol_list_length (symbol_list 
const *l
); 
  97 /** Get item \c n in symbol list \c l.  */ 
  98 symbol_list 
*symbol_list_n_get (symbol_list 
*l
, int n
); 
 100 /* Get the data type (alternative in the union) of the value for 
 101    symbol N in rule RULE.  */ 
 102 uniqstr 
symbol_list_n_type_name_get (symbol_list 
*l
, location loc
, int n
); 
 104 /** The item \c n in symbol list \c l is \c used.  */ 
 105 void symbol_list_n_used_set (symbol_list 
*l
, int n
, bool used
); 
 107 /** Set the \c \%destructor for \c node as \c destructor at \c loc.  */ 
 108 void symbol_list_destructor_set (symbol_list 
*node
, const char *destructor
, 
 111 /** Set the \c \%printer for \c node as \c printer at \c loc.  */ 
 112 void symbol_list_printer_set (symbol_list 
*node
, const char *printer
, 
 115 #endif /* !SYMLIST_H_ */