* 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.
This commit is contained in:
Akim Demaille
2002-07-03 10:54:33 +00:00
parent e1a4f3a428
commit e68e0410ab
7 changed files with 55 additions and 60 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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. <grin>. */
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);

View File

@@ -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;

View File

@@ -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");

View File

@@ -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;