mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-10 21:03:04 +00:00
* 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:
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
54
src/lalr.c
54
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. <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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
28
src/types.h
28
src/types.h
@@ -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;
|
||||
Reference in New Issue
Block a user