X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/595284e9d0277517bac8f3fc7bcdd529d97aa6f9..9a91e7f24626da71bb4b5f0bd76159f34ba2b6f6:/src/symtab.h diff --git a/src/symtab.h b/src/symtab.h index 09100f6a..aa6d65bb 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-2015 Free Software 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; -#define SYMBOL_NUMBER_MAXIMUM INT_MAX +# define SYMBOL_NUMBER_MAXIMUM INT_MAX typedef struct symbol symbol; @@ -126,16 +126,16 @@ struct symbol }; /** 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. */ -#define USER_NUMBER_HAS_STRING_ALIAS -9991 +# define USER_NUMBER_HAS_STRING_ALIAS -9991 /* 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); @@ -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. | `-----------------*/