]> git.saurik.com Git - bison.git/blobdiff - src/symtab.h
Merge remote-tracking branch 'origin/maint'
[bison.git] / src / symtab.h
index 09100f6a9c918f5295ab65859b423f80e5a976bd..bcc749511c2d20465bcc3e092e6af6f0131fca94 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for symtab.c and callers, part of Bison.
 
 /* Definitions for symtab.c and callers, part of Bison.
 
-   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2012 Free Software
+   Copyright (C) 1984, 1989, 1992, 2000-2002, 2004-2013 Free Software
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
@@ -46,7 +46,7 @@ typedef enum
 
 /** Internal token numbers. */
 typedef int symbol_number;
 
 /** Internal token numbers. */
 typedef int symbol_number;
-#define SYMBOL_NUMBER_MAXIMUM INT_MAX
+# define SYMBOL_NUMBER_MAXIMUM INT_MAX
 
 
 typedef struct symbol symbol;
 
 
 typedef struct symbol symbol;
@@ -126,16 +126,16 @@ struct symbol
 };
 
 /** Undefined user number.  */
 };
 
 /** Undefined user number.  */
-#define USER_NUMBER_UNDEFINED -1
+# define USER_NUMBER_UNDEFINED -1
 
 
-/* `symbol->user_token_number == USER_NUMBER_HAS_STRING_ALIAS' means
-   this symbol has a literal string alias.  For instance, `%token foo
-   "foo"' has `"foo"' numbered regularly, and `foo' numbered as
+/* 'symbol->user_token_number == USER_NUMBER_HAS_STRING_ALIAS' means
+   this symbol has a literal string alias.  For instance, '%token foo
+   "foo"' has '"foo"' numbered regularly, and 'foo' numbered as
    USER_NUMBER_HAS_STRING_ALIAS.  */
    USER_NUMBER_HAS_STRING_ALIAS.  */
-#define USER_NUMBER_HAS_STRING_ALIAS -9991
+# define USER_NUMBER_HAS_STRING_ALIAS -9991
 
 /* Undefined internal token number.  */
 
 /* Undefined internal token number.  */
-#define NUMBER_UNDEFINED (-1)
+# define NUMBER_UNDEFINED (-1)
 
 /** 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);
@@ -224,6 +224,59 @@ extern symbol *startsymbol;
 extern location startsymbol_location;
 
 
 extern location startsymbol_location;
 
 
+
+/*-------------------.
+| Symbol Relations.  |
+`-------------------*/
+
+/* The symbol relations are represented by a directed graph. */
+
+/* The id of a node */
+typedef int graphid;
+
+typedef struct symgraphlink symgraphlink;
+
+struct symgraphlink
+{
+  /** The second \c symbol or group of a precedence relation.
+   * See \c symgraph. */
+  graphid id;
+
+  symgraphlink *next;
+};
+
+/* Symbol precedence graph, to store the used precedence relations between
+ * symbols. */
+
+typedef struct symgraph symgraph;
+
+struct symgraph
+{
+  /** Identifier for the node: equal to the number of the symbol. */
+  graphid id;
+
+  /** The list of related symbols that have a smaller precedence. */
+  symgraphlink *succ;
+
+  /** The list of related symbols that have a greater precedence. */
+  symgraphlink *pred;
+};
+
+/** Register a new precedence relation as used. */
+
+void register_precedence (graphid first, graphid snd);
+
+/** Print a warning for each symbol whose precedence and/or associativity
+ * is useless. */
+
+void print_precedence_warnings (void);
+
+/*----------------------.
+| Symbol associativity  |
+`----------------------*/
+
+void register_assoc (graphid i, graphid j);
+
 /*-----------------.
 | Semantic types.  |
 `-----------------*/
 /*-----------------.
 | Semantic types.  |
 `-----------------*/