/* Output the generated parsing program for bison,
- Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.
+
+ Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001 Free Software
+ Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "reader.h"
#include "conflicts.h"
-extern void berror PARAMS((const char *));
-
-
static int nvectors;
static int nentries;
const char *table_name,
short *short_table,
short first_value,
- short begin, short end)
+ int begin, int end)
{
int i, j;
const char *table_name,
short *short_table,
short first_value,
- short begin, short end)
+ int begin, int end)
{
output_short_or_char_table (oout, comment, "short", table_name, short_table,
first_value, begin, end);
yyprhs and yyrhs are needed only for yydebug. */
/* With the no_parser option, all tables are generated */
if (!semantic_parser && !no_parser_flag)
- obstack_sgrow (&table_obstack, "\n#if YYDEBUG != 0\n");
+ obstack_sgrow (&table_obstack, "\n#if YYDEBUG\n");
{
int i;
short *short_tab = NULL;
obstack_sgrow (&table_obstack, "\n\
-#if YYDEBUG != 0\n");
+#if YYDEBUG\n");
{
short *values = XCALLOC (short, nrules + 1);
/* Output the table of symbol names. */
if (!token_table_flag && !no_parser_flag)
obstack_sgrow (&table_obstack,
- "\n#if YYDEBUG != 0 || defined YYERROR_VERBOSE\n\n");
+ "\n#if (YYDEBUG) || defined YYERROR_VERBOSE\n\n");
obstack_sgrow (&table_obstack, "\
/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */\n");
obstack_sgrow (&table_obstack,
int k;
int m = 0;
int n = 0;
- int count;
int default_rule;
int nreds;
- int max;
int rule;
int shift_state;
int symbol;
- unsigned mask;
- unsigned *wordp;
reductions *redp;
shifts *shiftp;
errs *errp;
default_rule = 0;
nreds = 0;
- redp = state_table[state].reduction_table;
+ redp = state_table[state].reductions;
if (redp)
{
n = state_table[state + 1].lookaheads;
for (i = n - 1; i >= m; i--)
- {
- rule = -LAruleno[i];
- wordp = LA (i);
- mask = 1;
-
- /* and find each token which the rule finds acceptable
- to come next */
- for (j = 0; j < ntokens; j++)
- {
- /* and record this rule as the rule to use if that
- token follows. */
- if (mask & *wordp)
- actrow[j] = rule;
-
- mask <<= 1;
- if (mask == 0)
- {
- mask = 1;
- wordp++;
- }
- }
- }
+ /* and find each token which the rule finds acceptable
+ to come next */
+ for (j = 0; j < ntokens; j++)
+ /* and record this rule as the rule to use if that
+ token follows. */
+ if (BITISSET (LA (i), j))
+ actrow[j] = -LAruleno[i];
}
}
- shiftp = state_table[state].shift_table;
-
/* Now see which tokens are allowed for shifts in this state. For
them, record the shift as the thing to do. So shift is preferred
to reduce. */
-
- if (shiftp)
+ shiftp = state_table[state].shifts;
+ for (i = 0; i < shiftp->nshifts; i++)
{
- k = shiftp->nshifts;
-
- for (i = 0; i < k; i++)
- {
- shift_state = shiftp->shifts[i];
- if (!shift_state)
- continue;
+ shift_state = shiftp->shifts[i];
+ if (!shift_state)
+ continue;
- symbol = state_table[shift_state].accessing_symbol;
+ symbol = state_table[shift_state].accessing_symbol;
- if (ISVAR (symbol))
- break;
+ if (ISVAR (symbol))
+ break;
- actrow[symbol] = shift_state;
+ actrow[symbol] = shift_state;
- /* Do not use any default reduction if there is a shift for
- error */
- if (symbol == error_token_number)
- nodefault = 1;
- }
+ /* Do not use any default reduction if there is a shift for
+ error */
+ if (symbol == error_token_number)
+ nodefault = 1;
}
- errp = err_table[state];
-
/* See which tokens are an explicit error in this state (due to
%nonassoc). For them, record MINSHORT as the action. */
+ errp = state_table[state].errs;
if (errp)
{
default_rule = redp->rules[0];
else
{
- max = 0;
+ int max = 0;
for (i = m; i < n; i++)
{
- count = 0;
+ int count = 0;
rule = -LAruleno[i];
for (j = 0; j < ntokens; j++)
}
-static void
-free_shifts (void)
-{
- shifts *sp, *sptmp; /* JF derefrenced freed ptr */
-
- for (sp = first_shift; sp; sp = sptmp)
- {
- sptmp = sp->next;
- XFREE (sp);
- }
-}
-
-
-static void
-free_reductions (void)
-{
- reductions *rp, *rptmp; /* JF fixed freed ptr */
-
- for (rp = first_reduction; rp; rp = rptmp)
- {
- rptmp = rp->next;
- XFREE (rp);
- }
-}
-
-
-
static void
save_column (int symbol, int default_state)
{
return j;
}
}
-
- berror ("pack_vector");
- return 0; /* JF keep lint happy */
+#define pack_vector_succeeded 0
+ assert (pack_vector_succeeded);
+ return 0;
}
width = XCALLOC (short, nvectors);
token_actions ();
- free_shifts ();
- free_reductions ();
+ LIST_FREE (shifts, first_shift);
+ LIST_FREE (reductions, first_reduction);
XFREE (LA);
XFREE (LAruleno);
}
-static void
-free_itemsets (void)
-{
- core *cp, *cptmp;
- for (cp = first_state; cp; cp = cptmp)
- {
- cptmp = cp->next;
- XFREE (cp);
- }
-}
-
-
/*----------------------------------------------------------.
| Output the parsing tables and the parser code to ftable. |
`----------------------------------------------------------*/
obstack_grow (&table_obstack, obstack_finish (&attrs_obstack), size);
}
reader_output_yylsp (&table_obstack);
- if (debug_flag)
- obstack_sgrow (&table_obstack, "\
+ obstack_fgrow1 (&table_obstack, "\
#ifndef YYDEBUG\n\
-# define YYDEBUG 1\n\
+# define YYDEBUG %d\n\
#endif\n\
-\n");
+\n", debug_flag);
if (semantic_parser)
obstack_fgrow1 (&table_obstack, "#include %s\n",
quotearg_style (c_quoting_style, attrsfile));
- if (!no_parser_flag)
- obstack_sgrow (&table_obstack, "#include <stdio.h>\n\n");
-
- free_itemsets ();
+ LIST_FREE (core, first_state);
output_defines ();
output_token_translations ();
/* if (semantic_parser) */