X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/a99ec53eb1f3b85c1419a1624e360ada377af9ee..266cdc3025b6140f04ba652ed076fe93a9eb9721:/src/symtab.h diff --git a/src/symtab.h b/src/symtab.h index a01db247..bcc74951 100644 --- a/src/symtab.h +++ b/src/symtab.h @@ -1,6 +1,6 @@ /* 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. @@ -128,9 +128,9 @@ struct symbol /** Undefined user number. */ # 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. */ # define USER_NUMBER_HAS_STRING_ALIAS -9991 @@ -224,6 +224,59 @@ extern symbol *startsymbol; 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. | `-----------------*/