mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-14 06:43:03 +00:00
Define the "identifier" of a symbol.
Symbols may have several string representations, for instance if they have an alias. What I call its "id" is a string that can be used as an identifier. May not exist. Currently the symbols which have the "tag_is_id" flag set are those that don't have an alias. Look harder for the id. * src/output.c (is_identifier): Move to... * src/symtab.c (is_identifier): here. * src/symtab.h, src/symtab.c (symbol_id_get): New. * src/output.c (symbol_definitions_output): Use it to define "id" and "has_id". Remove the definition of "tag_is_id". * data/lalr1.cc: Use the "id" and "has_id" whereever "tag" and "tag_is_id" were used to produce code. We still use "tag" for documentation.
This commit is contained in:
24
src/symtab.h
24
src/symtab.h
@@ -1,6 +1,6 @@
|
||||
/* Definitions for symtab.c and callers, part of Bison.
|
||||
|
||||
Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006, 2007
|
||||
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.
|
||||
@@ -105,9 +105,6 @@ struct symbol
|
||||
/* 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);
|
||||
|
||||
@@ -119,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);
|
||||
|
||||
|
||||
/*--------------------.
|
||||
| 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);
|
||||
|
||||
/** 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);
|
||||
|
||||
@@ -161,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);
|
||||
|
||||
|
||||
|
||||
/*------------------.
|
||||
| Special symbols. |
|
||||
`------------------*/
|
||||
|
||||
/** The error token. */
|
||||
extern symbol *errtoken;
|
||||
/** The token for unknown tokens. */
|
||||
|
||||
Reference in New Issue
Block a user