X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/06a2f464b12323e85887a102d38bb2cefd038931..e89a22bfab22e4d2ee73be49dcb66b51f8d0e892:/src/output.c?ds=sidebyside diff --git a/src/output.c b/src/output.c index c2ee8702..2daac6c3 100644 --- a/src/output.c +++ b/src/output.c @@ -1,5 +1,7 @@ /* 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. @@ -103,9 +105,6 @@ #include "reader.h" #include "conflicts.h" -extern void berror PARAMS((const char *)); - - static int nvectors; static int nentries; @@ -132,7 +131,7 @@ output_short_or_char_table (struct obstack *oout, const char *table_name, short *short_table, short first_value, - short begin, short end) + int begin, int end) { int i, j; @@ -170,7 +169,7 @@ output_short_table (struct obstack *oout, 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); @@ -317,7 +316,7 @@ output_gram (void) 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; @@ -373,7 +372,7 @@ output_rule_data (void) short *short_tab = NULL; obstack_sgrow (&table_obstack, "\n\ -#if YYDEBUG != 0\n"); +#if YYDEBUG\n"); { short *values = XCALLOC (short, nrules + 1); @@ -401,7 +400,7 @@ output_rule_data (void) /* 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, @@ -529,15 +528,11 @@ action_row (int state) 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; @@ -548,7 +543,7 @@ action_row (int state) default_rule = 0; nreds = 0; - redp = state_table[state].reduction_table; + redp = state_table[state].reductions; if (redp) { @@ -562,36 +557,20 @@ action_row (int state) 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]; } } /* 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. */ - shiftp = state_table[state].shift_table; - + shiftp = state_table[state].shifts; for (i = 0; i < shiftp->nshifts; i++) { shift_state = shiftp->shifts[i]; @@ -613,7 +592,7 @@ action_row (int state) /* See which tokens are an explicit error in this state (due to %nonassoc). For them, record MINSHORT as the action. */ - errp = err_table[state]; + errp = state_table[state].errs; if (errp) { @@ -635,10 +614,10 @@ action_row (int state) 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++) @@ -999,9 +978,9 @@ pack_vector (int vector) return j; } } - - berror ("pack_vector"); - return 0; /* JF keep lint happy */ +#define pack_vector_succeeded 0 + assert (pack_vector_succeeded); + return 0; } @@ -1289,20 +1268,16 @@ output (void) 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 \n\n"); - LIST_FREE (core, first_state); output_defines (); output_token_translations ();