mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 15:23:02 +00:00
Use lib/hash for the symbol table.
* src/gram.c (ntokens): Initialize to 1, to reserve a slot for EOF. * src/lex.c (lex): Set the `number' member of new terminals. * src/reader.c (bucket_check_defined, bucket_make_alias) (bucket_check_alias_consistence, bucket_translation): New. (reader, grammar_free, readgram, token_translations_init) (packsymbols): Adjust. (reader): Number the predefined tokens. * src/reduce.c (inaccessable_symbols): Just use hard coded numbers for predefined tokens. * src/symtab.h (bucket): Remove all the hash table related members. * src/symtab.c (symtab): Replace by... (bucket_table): this. (bucket_new, bucket_free, hash_compare_bucket, hash_bucket) (buckets_new, buckets_do): New.
This commit is contained in:
16
src/lex.c
16
src/lex.c
@@ -364,9 +364,13 @@ lex (void)
|
||||
obstack_1grow (&token_obstack, '\0');
|
||||
token_buffer = obstack_finish (&token_obstack);
|
||||
symval = getsym (token_buffer);
|
||||
symval->class = token_sym;
|
||||
if (symval->user_token_number == SUNDEF)
|
||||
symval->user_token_number = code;
|
||||
if (symval->number == -1)
|
||||
{
|
||||
symval->number = ntokens++;
|
||||
symval->class = token_sym;
|
||||
if (symval->user_token_number == SUNDEF)
|
||||
symval->user_token_number = code;
|
||||
}
|
||||
return tok_identifier;
|
||||
}
|
||||
|
||||
@@ -388,7 +392,11 @@ lex (void)
|
||||
token_buffer = obstack_finish (&token_obstack);
|
||||
|
||||
symval = getsym (token_buffer);
|
||||
symval->class = token_sym;
|
||||
if (symval->number == -1)
|
||||
{
|
||||
symval->number = ntokens++;
|
||||
symval->class = token_sym;
|
||||
}
|
||||
|
||||
return tok_identifier;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user