]> git.saurik.com Git - bison.git/blobdiff - src/symtab.h
Flag glr tests.
[bison.git] / src / symtab.h
index 9d5604af2f2f43934b1178c5f8aa64d8db5d8a24..0e521626c7e41b96e6c0e20945c9c0f2c3ceb79a 100644 (file)
@@ -1,24 +1,22 @@
 /* Definitions for symtab.c and callers, part of Bison.
 
 /* Definitions for symtab.c and callers, part of Bison.
 
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006
+   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
-   Bison is free software; you can redistribute it and/or modify
+   This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2, or (at your option)
-   any later version.
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
 
 
-   Bison is distributed in the hope that it will be useful,
+   This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /**
  * \file symtab.h
 
 /**
  * \file symtab.h
@@ -30,6 +28,7 @@
 
 # include "assoc.h"
 # include "location.h"
 
 # include "assoc.h"
 # include "location.h"
+# include "scan-code.h"
 # include "uniqstr.h"
 
 /*----------.
 # include "uniqstr.h"
 
 /*----------.
@@ -72,25 +71,13 @@ struct symbol
      example, if <tt>symbol::destructor = NULL</tt>, a default \c \%destructor
      or a per-type \c \%destructor might be appropriate, and
      \c symbol_destructor_get will compute the correct one.  */
      example, if <tt>symbol::destructor = NULL</tt>, a default \c \%destructor
      or a per-type \c \%destructor might be appropriate, and
      \c symbol_destructor_get will compute the correct one.  */
-  const char *destructor;
-
-  /** The location of \c symbol::destructor.
-
-     Access this field only through <tt>symbol</tt>'s interface functions.
-     \sa symbol::destructor  */
-  location destructor_location;
+  code_props destructor;
 
   /** Any \c \%printer declared specifically for this symbol.
 
      Access this field only through <tt>symbol</tt>'s interface functions.
      \sa symbol::destructor  */
 
   /** Any \c \%printer declared specifically for this symbol.
 
      Access this field only through <tt>symbol</tt>'s interface functions.
      \sa symbol::destructor  */
-  const char *printer;
-
-  /** The location of \c symbol::printer.
-
-     Access this field only through <tt>symbol</tt>'s interface functions.
-     \sa symbol::destructor  */
-  location printer_location;
+  code_props printer;
 
   symbol_number number;
   location prec_location;
 
   symbol_number number;
   location prec_location;
@@ -118,9 +105,6 @@ struct symbol
 /* Undefined internal token number.  */
 #define NUMBER_UNDEFINED (-1)
 
 /* Undefined internal token number.  */
 #define NUMBER_UNDEFINED (-1)
 
-/** Print a symbol (for debugging). */
-void symbol_print (symbol *s, FILE *f);
-
 /** Fetch (or create) the symbol associated to KEY.  */
 symbol *symbol_from_uniqstr (const uniqstr key, location loc);
 
 /** Fetch (or create) the symbol associated to KEY.  */
 symbol *symbol_from_uniqstr (const uniqstr key, location loc);
 
@@ -132,9 +116,23 @@ symbol *symbol_get (const char *key, location loc);
    Its name cannot conflict with the user's names.  */
 symbol *dummy_symbol_get (location loc);
 
    Its name cannot conflict with the user's names.  */
 symbol *dummy_symbol_get (location loc);
 
+
+/*--------------------.
+| Methods on symbol.  |
+`--------------------*/
+
+/** Print a symbol (for debugging). */
+void symbol_print (symbol *s, FILE *f);
+
 /** Is this a dummy nonterminal?  */
 bool symbol_is_dummy (const symbol *sym);
 
 /** Is this a dummy nonterminal?  */
 bool symbol_is_dummy (const symbol *sym);
 
+/** Return the name of the symbol that can be used as an identifier.
+ ** Consider the alias if needed.
+ ** Return 0 if there is none (e.g., the symbol is only defined as
+ ** a string). */
+uniqstr symbol_id_get (symbol const *sym);
+
 /** Declare the new symbol \c sym.  Make it an alias of \c symval.  */
 void symbol_make_alias (symbol *sym, symbol *symval, location loc);
 
 /** Declare the new symbol \c sym.  Make it an alias of \c symval.  */
 void symbol_make_alias (symbol *sym, symbol *symval, location loc);
 
@@ -143,27 +141,22 @@ void symbol_make_alias (symbol *sym, symbol *symval, location loc);
     Do nothing if passed 0 as \c type_name.  */
 void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
 
     Do nothing if passed 0 as \c type_name.  */
 void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
 
-/** Set the \c destructor associated with \c sym.  */
-void symbol_destructor_set (symbol *sym, const char *destructor, location loc);
-
-/** Get the computed \c \%destructor for \c sym, or \c NULL if none.   */
-const char *symbol_destructor_get (symbol *sym);
+/** Get the \c class string associated with \c sym.  */
+const char *symbol_class_get_string (symbol *sym);
 
 
-/** Get the grammar location of the computed \c \%destructor for \c sym.
+/** Set the \c destructor associated with \c sym.  */
+void symbol_destructor_set (symbol *sym, code_props const *destructor);
 
 
-  \pre <tt>symbol_destructor_get (sym) != NULL</tt> */
-location symbol_destructor_location_get (symbol *sym);
+/** Get the computed \c \%destructor for \c sym, which was initialized with
+    \c code_props_none_init if there's no \c \%destructor.  */
+code_props const *symbol_destructor_get (symbol const *sym);
 
 /** Set the \c printer associated with \c sym.  */
 
 /** Set the \c printer associated with \c sym.  */
-void symbol_printer_set (symbol *sym, const char *printer, location loc);
-
-/** Get the computed \c \%printer for \c sym, or \c NULL if none.  */
-const char *symbol_printer_get (symbol *sym);
-
-/** Get the grammar location of the computed \c \%printer for \c sym.
+void symbol_printer_set (symbol *sym, code_props const *printer);
 
 
-  \pre <tt>symbol_printer_get (sym) != NULL</tt> */
-location symbol_printer_location_get (symbol *sym);
+/** Get the computed \c \%printer for \c sym, which was initialized with
+    \c code_props_none_init if there's no \c \%printer.  */
+code_props const *symbol_printer_get (symbol const *sym);
 
 /* Set the \c precedence associated with \c sym.
 
 
 /* Set the \c precedence associated with \c sym.
 
@@ -179,6 +172,11 @@ void symbol_class_set (symbol *sym, symbol_class class, location loc,
 void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
 
 
 void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
 
 
+
+/*------------------.
+| Special symbols.  |
+`------------------*/
+
 /** The error token. */
 extern symbol *errtoken;
 /** The token for unknown tokens.  */
 /** The error token. */
 extern symbol *errtoken;
 /** The token for unknown tokens.  */
@@ -209,14 +207,9 @@ typedef struct {
   uniqstr tag;
 
   /** Any \c %destructor declared for this semantic type.  */
   uniqstr tag;
 
   /** Any \c %destructor declared for this semantic type.  */
-  const char *destructor;
-  /** The location of \c semantic_type::destructor.  */
-  location destructor_location;
-
+  code_props destructor;
   /** Any \c %printer declared for this semantic type.  */
   /** Any \c %printer declared for this semantic type.  */
-  const char *printer;
-  /** The location of \c semantic_type::printer.  */
-  location printer_location;
+  code_props printer;
 } semantic_type;
 
 /** Fetch (or create) the semantic type associated to KEY.  */
 } semantic_type;
 
 /** Fetch (or create) the semantic type associated to KEY.  */
@@ -226,12 +219,12 @@ semantic_type *semantic_type_from_uniqstr (const uniqstr key);
 semantic_type *semantic_type_get (const char *key);
 
 /** Set the \c destructor associated with \c type.  */
 semantic_type *semantic_type_get (const char *key);
 
 /** Set the \c destructor associated with \c type.  */
-void semantic_type_destructor_set (semantic_type *type, const char *destructor,
-                                   location loc);
+void semantic_type_destructor_set (semantic_type *type,
+                                   code_props const *destructor);
 
 /** Set the \c printer associated with \c type.  */
 
 /** Set the \c printer associated with \c type.  */
-void semantic_type_printer_set (semantic_type *type, const char *printer,
-                                location loc);
+void semantic_type_printer_set (semantic_type *type,
+                                code_props const *printer);
 
 /*----------------------------------.
 | Symbol and semantic type tables.  |
 
 /*----------------------------------.
 | Symbol and semantic type tables.  |
@@ -260,13 +253,13 @@ void symbols_pack (void);
 `---------------------------------------*/
 
 /** Set the default \c \%destructor for tagged values.  */
 `---------------------------------------*/
 
 /** Set the default \c \%destructor for tagged values.  */
-void default_tagged_destructor_set (const char *destructor, location loc);
+void default_tagged_destructor_set (code_props const *destructor);
 /** Set the default \c \%destructor for tagless values.  */
 /** Set the default \c \%destructor for tagless values.  */
-void default_tagless_destructor_set (const char *destructor, location loc);
+void default_tagless_destructor_set (code_props const *destructor);
 
 /** Set the default \c \%printer for tagged values.  */
 
 /** Set the default \c \%printer for tagged values.  */
-void default_tagged_printer_set (const char *printer, location loc);
+void default_tagged_printer_set (code_props const *printer);
 /** Set the default \c \%printer for tagless values.  */
 /** Set the default \c \%printer for tagless values.  */
-void default_tagless_printer_set (const char *printer, location loc);
+void default_tagless_printer_set (code_props const *printer);
 
 #endif /* !SYMTAB_H_ */
 
 #endif /* !SYMTAB_H_ */