]> git.saurik.com Git - bison.git/blobdiff - src/symtab.h
* src/system.h (OUTPUT_EXT, TAB_EXT): Define only if not defined
[bison.git] / src / symtab.h
index 23a733514b3862871d83443dd84e87f8337a0f4a..6433efcd527a7058df7910e5e1b18cd0c1018b69 100644 (file)
@@ -1,5 +1,6 @@
-/* Definitions for symtab.c and callers, part of bison,
-   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002
+/* Definitions for symtab.c and callers, part of Bison.
+
+   Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004
    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.
@@ -22,9 +23,9 @@
 #ifndef SYMTAB_H_
 # define SYMTAB_H_
 
 #ifndef SYMTAB_H_
 # define SYMTAB_H_
 
-# include "struniq.h"
-# include "location.h"
 # include "assoc.h"
 # include "assoc.h"
+# include "location.h"
+# include "uniqstr.h"
 
 /*----------.
 | Symbols.  |
 
 /*----------.
 | Symbols.  |
@@ -40,34 +41,41 @@ typedef enum
 
 
 /* Internal token numbers. */
 
 
 /* Internal token numbers. */
-typedef short symbol_number_t;
-#define SYMBOL_NUMBER_MAX ((symbol_number_t) SHRT_MAX)
+typedef int symbol_number;
+#define SYMBOL_NUMBER_MAXIMUM INT_MAX
+
 
 
+typedef struct symbol symbol;
 
 
-typedef struct symbol_s symbol_t;
-struct symbol_s
+/* When extending this structure, be sure to complete
+   symbol_check_alias_consistency.  */
+struct symbol
 {
   /* The key, name of the symbol.  */
 {
   /* The key, name of the symbol.  */
-  struniq_t tag;
-  /* The location of its first occurence.  */
-  location_t location;
+  uniqstr tag;
+  /* The location of its first occurrence.  */
+  location location;
 
   /* Its %type and associated printer and destructor.  */
 
   /* Its %type and associated printer and destructor.  */
-  struniq_t type_name;
+  uniqstr type_name;
+  location type_location;
+
   char *destructor;
   char *destructor;
-  location_t destructor_location;
+  location destructor_location;
+
   char *printer;
   char *printer;
-  location_t printer_location;
+  location printer_location;
 
 
-  symbol_number_t number;
-  short prec;
-  assoc_t assoc;
+  symbol_number number;
+  location prec_location;
+  int prec;
+  assoc assoc;
   int user_token_number;
 
   /* Points to the other in the identifier-symbol pair for an alias.
      Special value USER_NUMBER_ALIAS in the identifier half of the
      identifier-symbol pair for an alias.  */
   int user_token_number;
 
   /* Points to the other in the identifier-symbol pair for an alias.
      Special value USER_NUMBER_ALIAS in the identifier half of the
      identifier-symbol pair for an alias.  */
-  symbol_t *alias;
+  symbol *alias;
   symbol_class class;
 };
 
   symbol_class class;
 };
 
@@ -81,56 +89,49 @@ struct symbol_s
 #define USER_NUMBER_ALIAS -9991
 
 /* Undefined internal token number.  */
 #define USER_NUMBER_ALIAS -9991
 
 /* Undefined internal token number.  */
-#define NUMBER_UNDEFINED ((symbol_number_t) -1)
+#define NUMBER_UNDEFINED (-1)
 
 
 /* Fetch (or create) the symbol associated to KEY.  */
 
 
 /* Fetch (or create) the symbol associated to KEY.  */
-symbol_t *symbol_get (const char *key, location_t location);
+symbol *symbol_get (const char *key, location loc);
 
 /* Generate a dummy nonterminal, whose name cannot conflict with the
    user's names.  */
 
 /* Generate a dummy nonterminal, whose name cannot conflict with the
    user's names.  */
-symbol_t *dummy_symbol_get (location_t location);
+symbol *dummy_symbol_get (location loc);
 
 
-/* Declare the new SYMBOL.  Make it an alias of SYMVAL.  */
-void symbol_make_alias (symbol_t *symbol, symbol_t *symval,
-                       location_t location);
+/* Declare the new symbol SYM.  Make it an alias of SYMVAL.  */
+void symbol_make_alias (symbol *sym, symbol *symval, location loc);
 
 
-/* Set the TYPE_NAME associated to SYMBOL. Does nothing if passed 0 as
+/* Set the TYPE_NAME associated with SYM.  Do nothing if passed 0 as
    TYPE_NAME.  */
    TYPE_NAME.  */
-void symbol_type_set (symbol_t *symbol,
-                     struniq_t type_name, location_t location);
+void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
 
 
-/* Set the DESTRUCTOR associated to SYMBOL.  */
-void symbol_destructor_set (symbol_t *symbol,
-                           char *destructor, location_t location);
+/* Set the DESTRUCTOR associated with SYM.  */
+void symbol_destructor_set (symbol *sym, char *destructor, location loc);
 
 
-/* Set the PRINTER associated to SYMBOL.  */
-void symbol_printer_set (symbol_t *symbol,
-                        char *printer, location_t location);
+/* Set the PRINTER associated with SYM.  */
+void symbol_printer_set (symbol *sym, char *printer, location loc);
 
 
-/* Set the PRECEDENCE associated to SYMBOL.  Ensures that SYMBOL is a
-   terminal.  Does nothing if invoked with UNDEF_ASSOC as ASSOC.  */
-void symbol_precedence_set (symbol_t *symbol,
-                           int prec, assoc_t assoc, location_t location);
+/* Set the PRECEDENCE associated with SYM.  Ensure that SYMBOL is a
+   terminal.  Do nothing if invoked with UNDEF_ASSOC as ASSOC.  */
+void symbol_precedence_set (symbol *sym, int prec, assoc a, location loc);
 
 
-/* Set the CLASS associated to SYMBOL.  */
-void symbol_class_set (symbol_t *symbol,
-                      symbol_class class, location_t location);
+/* Set the CLASS associated with SYM.  */
+void symbol_class_set (symbol *sym, symbol_class class, location loc);
 
 
-/* Set the USER_TOKEN_NUMBER associated to SYMBOL.  */
-void symbol_user_token_number_set (symbol_t *symbol,
-                                  int user_number, location_t location);
+/* Set the USER_TOKEN_NUMBER associated with SYM.  */
+void symbol_user_token_number_set (symbol *sym, int user_number, location loc);
 
 
 /* Distinguished symbols.  AXIOM is the real start symbol, that used
    by the automaton.  STARTSYMBOL is the one specified by the user.
    */
 
 
 /* Distinguished symbols.  AXIOM is the real start symbol, that used
    by the automaton.  STARTSYMBOL is the one specified by the user.
    */
-extern symbol_t *errtoken;
-extern symbol_t *undeftoken;
-extern symbol_t *endtoken;
-extern symbol_t *accept;
-extern symbol_t *startsymbol;
-extern location_t startsymbol_location;
+extern symbol *errtoken;
+extern symbol *undeftoken;
+extern symbol *endtoken;
+extern symbol *accept;
+extern symbol *startsymbol;
+extern location startsymbol_location;
 
 
 /*---------------.
 
 
 /*---------------.
@@ -141,13 +142,6 @@ extern location_t startsymbol_location;
 /* Create the symbol table.  */
 void symbols_new (void);
 
 /* Create the symbol table.  */
 void symbols_new (void);
 
-/* A function to apply to each symbol. */
-typedef bool (*symbol_processor) (symbol_t *);
-
-/* Apply PROCESSOR to all the symbols.  PROCESSOR must return true: on
-   false, the processing stops.  */
-void symbols_do (symbol_processor processor, void *processor_data);
-
 /* Free all the memory allocated for symbols.  */
 void symbols_free (void);
 
 /* Free all the memory allocated for symbols.  */
 void symbols_free (void);