]> git.saurik.com Git - bison.git/blobdiff - src/symlist.h
In the grammar scanner, STRING_FINISH unclosed constructs and return
[bison.git] / src / symlist.h
index b41540baa1ea11863c713e9bd2e881a7c4d4852b..215fdf0a3b53e582c2e858fc2deb4ba3b435e52a 100644 (file)
@@ -1,5 +1,6 @@
 /* Lists of symbols for Bison
 /* Lists of symbols for Bison
-   Copyright (C) 2002  Free Software Foundation, Inc.
+
+   Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    This file is part of Bison, the GNU Compiler Compiler.
 
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
 
    You should have received a copy of the GNU General Public License
    along with Bison; see the file COPYING.  If not, write to
-   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #ifndef SYMLIST_H_
 # define SYMLIST_H_
 
 
 #ifndef SYMLIST_H_
 # define SYMLIST_H_
 
-# include "symtab.h"
 # include "location.h"
 # include "location.h"
+# include "symtab.h"
 
 
-typedef struct symbol_list_s
+/* A list of symbols, used during the parsing to store the rules.  */
+typedef struct symbol_list
 {
 {
-  struct symbol_list_s *next;
-  symbol_t *sym;
-  location_t location;
+  /* The symbol.  */
+  symbol *sym;
+  location location;
+
+  /* If this symbol is the generated lhs for a midrule but this is the rule in
+     whose rhs it appears, MIDRULE = a pointer to that midrule.  */
+  struct symbol_list *midrule;
+
+  /* If this symbol is the generated lhs for a midrule and this is that
+     midrule, MIDRULE_PARENT_RULE = a pointer to the rule in whose rhs it
+     appears, and MIDRULE_PARENT_RHS_INDEX = its rhs index (1-origin) in the
+     parent rule.  */
+  struct symbol_list *midrule_parent_rule;
+  int midrule_parent_rhs_index;
 
   /* The action is attached to the LHS of a rule. */
   const char *action;
 
   /* The action is attached to the LHS of a rule. */
   const char *action;
-  location_t action_location;
+  location action_location;
+
+  /* Whether this symbol's value is used in the current action.  */
+  bool used;
 
 
-  symbol_t *ruleprec;
-} symbol_list_t;
+  /* Precedence/associativity.  */
+  symbol *ruleprec;
+  int dprec;
+  int merger;
+  location merger_declaration_location;
 
 
+  /* The list.  */
+  struct symbol_list *next;
+} symbol_list;
 
 
-/* Create a list containing SYMBOL at LOCATION.  */
-symbol_list_t *symbol_list_new PARAMS ((symbol_t *sym, location_t location));
 
 
+/* Create a list containing SYM at LOC.  */
+symbol_list *symbol_list_new (symbol *sym, location loc);
 
 
-/* Prepend SYMBOL at LOCATION to the LIST.  */
-symbol_list_t * symbol_list_prepend PARAMS ((symbol_list_t *list,
-                                            symbol_t *symbol,
-                                            location_t location));
+/* Print it.  */
+void symbol_list_print (const symbol_list *l, FILE *f);
 
 
+/* Prepend SYM at LOC to the LIST.  */
+symbol_list *symbol_list_prepend (symbol_list *l,
+                                 symbol *sym,
+                                 location loc);
 
 /* Free the LIST, but not the symbols it contains.  */
 
 /* Free the LIST, but not the symbols it contains.  */
-void symbol_list_free PARAMS ((symbol_list_t *list));
+void symbol_list_free (symbol_list *l);
 
 
+/* Return its length. */
+int symbol_list_length (symbol_list const *l);
+
+/* Get symbol N in symbol list L.  */
+symbol_list *symbol_list_n_get (symbol_list *l, int n);
 
 /* Get the data type (alternative in the union) of the value for
    symbol N in rule RULE.  */
 
 /* Get the data type (alternative in the union) of the value for
    symbol N in rule RULE.  */
-char *symbol_list_n_type_name_get PARAMS ((symbol_list_t *rule,
-                                          location_t location, int n));
+uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
+
+/* The symbol N in symbol list L is USED.  */
+void symbol_list_n_used_set (symbol_list *l, int n, bool used);
 
 #endif /* !SYMLIST_H_ */
 
 #endif /* !SYMLIST_H_ */