From: Akim Demaille Date: Wed, 3 Jul 2002 10:54:33 +0000 (+0000) Subject: * src/lalr.h, src/lalr.c (goto_number_t): New. X-Git-Tag: BISON-1_49b~87 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/e68e0410aba6a9b976a1e496aa80ffb3d2095fb9 * src/lalr.h, src/lalr.c (goto_number_t): New. * src/lalr.c (goto_list_t): New. Propagate them. * src/nullable.c (rule_list_t): New. Propagate. * src/types.h: Remove. --- diff --git a/ChangeLog b/ChangeLog index 606481ab..26fa0e58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-07-03 Akim Demaille + + * src/lalr.h, src/lalr.c (goto_number_t): New. + * src/lalr.c (goto_list_t): New. + Propagate them. + * src/nullable.c (rule_list_t): New. + Propagate. + * src/types.h: Remove. + 2002-07-03 Akim Demaille * src/closure.c (print_fderives): Use rule_rhs_print. @@ -16,7 +25,6 @@ * src/scan-skel.l: here. (<>): Close yyout, and free its name. - 2002-07-03 Akim Demaille Fix some memory leaks, and fix a bug: state 0 was examined twice. diff --git a/src/Makefile.am b/src/Makefile.am index 7b67e8e3..c3edda8d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -62,7 +62,6 @@ bison_SOURCES = \ symlist.c symlist.h \ symtab.c symtab.h \ system.h \ - types.h \ vcg.c vcg.h \ vcg_defaults.h diff --git a/src/derives.c b/src/derives.c index 87b15f2d..456dfb22 100644 --- a/src/derives.c +++ b/src/derives.c @@ -22,7 +22,6 @@ #include "system.h" #include "getargs.h" #include "symtab.h" -#include "types.h" #include "reader.h" #include "gram.h" #include "derives.h" diff --git a/src/lalr.c b/src/lalr.c index d735921a..d07f19bb 100644 --- a/src/lalr.c +++ b/src/lalr.c @@ -32,7 +32,6 @@ #include "symtab.h" #include "gram.h" #include "reader.h" -#include "types.h" #include "LR0.h" #include "complain.h" #include "lalr.h" @@ -40,21 +39,30 @@ #include "derives.h" #include "getargs.h" +goto_number_t *goto_map = NULL; +static goto_number_t ngotos = 0; +state_number_t *from_state = NULL; +state_number_t *to_state = NULL; + +/* Linked list of goto numbers. */ +typedef struct goto_list_s +{ + struct goto_list_s *next; + goto_number_t value; +} goto_list_t; + + rule_t **LArule = NULL; bitsetv LA = NULL; size_t nLA; -static int ngotos; -short *goto_map = NULL; -state_number_t *from_state = NULL; -state_number_t *to_state = NULL; /* And for the famous F variable, which name is so descriptive that a comment is hardly needed. . */ static bitsetv F = NULL; -static short **includes; -static shorts **lookback; +static goto_number_t **includes; +static goto_list_t **lookback; @@ -72,7 +80,7 @@ initialize_LA (void) LA = bitsetv_create (nLA, ntokens, BITSET_FIXED); LArule = XCALLOC (rule_t *, nLA); - lookback = XCALLOC (shorts *, nLA); + lookback = XCALLOC (goto_list_t *, nLA); np = LArule; for (i = 0; i < nstates; i++) @@ -86,10 +94,10 @@ static void set_goto_map (void) { state_number_t state; - short *temp_map; + goto_number_t *temp_map; - goto_map = XCALLOC (short, nvars + 1) - ntokens; - temp_map = XCALLOC (short, nvars + 1) - ntokens; + goto_map = XCALLOC (goto_number_t, nvars + 1) - ntokens; + temp_map = XCALLOC (goto_number_t, nvars + 1) - ntokens; ngotos = 0; for (state = 0; state < nstates; ++state) @@ -98,8 +106,8 @@ set_goto_map (void) int i; for (i = sp->num - 1; i >= 0 && TRANSITION_IS_GOTO (sp, i); --i) { - if (ngotos == SHRT_MAX) - fatal (_("too many gotos (max %d)"), SHRT_MAX); + if (ngotos == GOTO_NUMBER_MAX) + fatal (_("too many gotos (max %d)"), GOTO_NUMBER_MAX); ngotos++; goto_map[TRANSITION_SYMBOL (sp, i)]++; @@ -178,8 +186,8 @@ map_goto (state_number_t state, symbol_number_t symbol) static void initialize_F (void) { - short **reads = XCALLOC (short *, ngotos); - short *edge = XCALLOC (short, ngotos + 1); + goto_number_t **reads = XCALLOC (goto_number_t *, ngotos); + goto_number_t *edge = XCALLOC (goto_number_t, ngotos + 1); int nedges = 0; int i; @@ -204,7 +212,7 @@ initialize_F (void) if (nedges) { - reads[i] = XCALLOC (short, nedges + 1); + reads[i] = XCALLOC (goto_number_t, nedges + 1); memcpy (reads[i], edge, nedges * sizeof (edge[0])); reads[i][nedges] = -1; nedges = 0; @@ -225,7 +233,7 @@ static void add_lookback_edge (state_t *state, rule_number_t ruleno, int gotono) { int i; - shorts *sp; + goto_list_t *sp; for (i = 0; i < state->nlookaheads; ++i) if (state->lookaheads_rule[i]->number == ruleno) @@ -233,7 +241,7 @@ add_lookback_edge (state_t *state, rule_number_t ruleno, int gotono) assert (state->lookaheads_rule[i]->number == ruleno); - sp = XCALLOC (shorts, 1); + sp = XCALLOC (goto_list_t, 1); sp->next = lookback[(state->lookaheads - LA) + i]; sp->value = gotono; lookback[(state->lookaheads - LA) + i] = sp; @@ -244,11 +252,11 @@ add_lookback_edge (state_t *state, rule_number_t ruleno, int gotono) static void build_relations (void) { - short *edge = XCALLOC (short, ngotos + 1); + goto_number_t *edge = XCALLOC (goto_number_t, ngotos + 1); state_number_t *states1 = XCALLOC (state_number_t, ritem_longest_rhs () + 1); int i; - includes = XCALLOC (short *, ngotos); + includes = XCALLOC (goto_number_t *, ngotos); for (i = 0; i < ngotos; i++) { @@ -295,7 +303,7 @@ build_relations (void) if (nedges) { int j; - includes[i] = XCALLOC (short, nedges + 1); + includes[i] = XCALLOC (goto_number_t, nedges + 1); for (j = 0; j < nedges; j++) includes[i][j] = edge[j]; includes[i][nedges] = -1; @@ -328,7 +336,7 @@ static void compute_lookaheads (void) { size_t i; - shorts *sp; + goto_list_t *sp; for (i = 0; i < nLA; i++) for (sp = lookback[i]; sp; sp = sp->next) @@ -336,7 +344,7 @@ compute_lookaheads (void) /* Free LOOKBACK. */ for (i = 0; i < nLA; i++) - LIST_FREE (shorts, lookback[i]); + LIST_FREE (goto_list_t, lookback[i]); XFREE (lookback); bitsetv_free (F); diff --git a/src/lalr.h b/src/lalr.h index 3bece77c..696bc98d 100644 --- a/src/lalr.h +++ b/src/lalr.h @@ -49,7 +49,10 @@ void lalr PARAMS ((void)); together and GOTO_MAP[I - NTOKENS] is the index in FROM_STATE and TO_STATE of the first of them. */ -extern short *goto_map; +typedef short goto_number_t; +# define GOTO_NUMBER_MAX ((goto_number_t) INT_MAX) + +extern goto_number_t *goto_map; extern state_number_t *from_state; extern state_number_t *to_state; diff --git a/src/nullable.c b/src/nullable.c index b3686646..635ea619 100644 --- a/src/nullable.c +++ b/src/nullable.c @@ -1,5 +1,5 @@ /* Part of the bison parser generator, - Copyright 1984, 1989, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1984, 1989, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -26,11 +26,17 @@ #include "system.h" #include "getargs.h" #include "symtab.h" -#include "types.h" #include "gram.h" #include "reduce.h" #include "nullable.h" +/* Linked list of rule numbers. */ +typedef struct rule_list_s +{ + struct rule_list_s *next; + rule_number_t value; +} rule_list_t; + char *nullable = NULL; static void @@ -49,16 +55,16 @@ set_nullable (void) rule_number_t ruleno; symbol_number_t *s1; symbol_number_t *s2; - shorts *p; + rule_list_t *p; symbol_number_t *squeue = XCALLOC (symbol_number_t, nvars); short *rcount = XCALLOC (short, nrules + 1); /* RITEM contains all the rules, including useless productions. Hence we must allocate room for useless nonterminals too. */ - shorts **rsets = XCALLOC (shorts *, nvars) - ntokens; + rule_list_t **rsets = XCALLOC (rule_list_t *, nvars) - ntokens; /* This is said to be more elements than we actually use. Supposedly NRITEMS - NRULES is enough. But why take the risk? */ - shorts *relts = XCALLOC (shorts, nritems + nvars + 1); + rule_list_t *relts = XCALLOC (rule_list_t, nritems + nvars + 1); if (trace_flag) fprintf (stderr, "Entering set_nullable\n"); diff --git a/src/types.h b/src/types.h deleted file mode 100644 index 04337a36..00000000 --- a/src/types.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Define data type for representing bison's grammar input as it is parsed, - Copyright 1984, 1989 Free Software Foundation, Inc. - -This file is part of Bison, the GNU Compiler Compiler. - -Bison is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -Bison is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Bison; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - - -typedef - struct shorts - { - struct shorts *next; - short value; - } - shorts;