* src/symtab.c (symbol_user_token_number_set): Don't complain when

assigning twice the same user number to a token, so that we can
use it in...
* src/lex.c (lex): here.
Also use `symbol_class_set' instead of hand written code.
* src/reader.c (parse_assoc_decl): Likewise.
This commit is contained in:
Akim Demaille
2002-06-10 08:38:10 +00:00
parent 44536b35c4
commit 5e424082ce
4 changed files with 19 additions and 24 deletions

View File

@@ -1,5 +1,6 @@
/* Token-reader for Bison's input parser,
Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -364,13 +365,8 @@ lex (void)
obstack_1grow (&token_obstack, '\0');
token_buffer = obstack_finish (&token_obstack);
symval = getsym (token_buffer);
if (symval->number == NUMBER_UNDEFINED)
{
symval->number = ntokens++;
symval->class = token_sym;
if (symval->user_token_number == USER_NUMBER_UNDEFINED)
symval->user_token_number = code;
}
symbol_class_set (symval, token_sym);
symbol_user_token_number_set (symval, code);
return tok_identifier;
}
@@ -378,7 +374,7 @@ lex (void)
/* parse the literal string token and treat as an identifier */
{
int code; /* ignored here */
int code;
obstack_1grow (&token_obstack, '\"');
/* Read up to and including ". */
@@ -392,12 +388,7 @@ lex (void)
token_buffer = obstack_finish (&token_obstack);
symval = getsym (token_buffer);
if (symval->number == NUMBER_UNDEFINED)
{
symval->number = ntokens++;
symval->class = token_sym;
}
symbol_class_set (symval, token_sym);
return tok_identifier;
}

View File

@@ -656,13 +656,7 @@ parse_assoc_decl (associativity assoc)
break;
case tok_identifier:
if (symval->class == nterm_sym)
complain (_("symbol %s redefined"), symval->tag);
if (symval->number == NUMBER_UNDEFINED)
{
symval->number = ntokens++;
symval->class = token_sym;
}
symbol_class_set (symval, token_sym);
symbol_precedence_set (symval, lastprec, assoc);
if (name)
symbol_type_set (symval, name);
@@ -671,7 +665,7 @@ parse_assoc_decl (associativity assoc)
case tok_number:
if (prev == tok_identifier)
{
symval->user_token_number = numval;
symbol_user_token_number_set (symval, numval);
}
else
{

View File

@@ -115,7 +115,8 @@ symbol_user_token_number_set (symbol_t *symbol, int user_token_number)
{
assert (symbol->class == token_sym);
if (symbol->user_token_number != USER_NUMBER_UNDEFINED)
if (symbol->user_token_number != USER_NUMBER_UNDEFINED
&& symbol->user_token_number != user_token_number)
complain (_("redefining user token number of %s"), symbol->tag);
symbol->user_token_number = user_token_number;