* src/print.c: Include reduce.h.

Reported by Hans Aberg.
This commit is contained in:
Akim Demaille
2001-11-14 14:43:58 +00:00
parent 0f37a9942f
commit 09b503c8e1
5 changed files with 64 additions and 43 deletions

View File

@@ -1,3 +1,20 @@
2001-11-14 Akim Demaille <akim@epita.fr>
* src/print.c: Include reduce.h.
Reported by Hans Aberg.
2001-11-14 Akim Demaille <akim@epita.fr>
* src/lex.c, src/lex.h (token_buffer, unlexed_token_buffer):
Revert a previous patch: these are really const.
* src/conflicts.c (conflict_report): Additional useless pair of
braces to pacify GCC's warnings for `if () if () {} else {}'.
* src/lex.c (parse_percent_token): Replace equal_offset with
arg_offset.
arg is const.
Be sure to strdup `arg' when used, since there is no reason for
token_buffer not to change.
2001-11-14 Akim Demaille <akim@epita.fr> 2001-11-14 Akim Demaille <akim@epita.fr>
* src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper * src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper

View File

@@ -474,24 +474,26 @@ conflicts_print (void)
/* Report the total number of conflicts on STDERR. */ /* Report the total number of conflicts on STDERR. */
if (src_total || rrc_total) if (src_total || rrc_total)
if (yacc_flag) {
{ if (yacc_flag)
/* If invoked with `--yacc', use the output format specified by {
POSIX. */ /* If invoked with `--yacc', use the output format specified by
fprintf (stderr, _("conflicts: ")); POSIX. */
if (src_total > 0) fprintf (stderr, _("conflicts: "));
fprintf (stderr, _(" %d shift/reduce"), src_total); if (src_total > 0)
if (src_total > 0 && rrc_total > 0) fprintf (stderr, _(" %d shift/reduce"), src_total);
fprintf (stderr, ","); if (src_total > 0 && rrc_total > 0)
if (rrc_total > 0) fprintf (stderr, ",");
fprintf (stderr, _(" %d reduce/reduce"), rrc_total); if (rrc_total > 0)
putc ('\n', stderr); fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
} putc ('\n', stderr);
else }
{ else
fprintf (stderr, _("%s contains "), infile); {
fputs (conflict_report (src_total, rrc_total), stderr); fprintf (stderr, _("%s contains "), infile);
} fputs (conflict_report (src_total, rrc_total), stderr);
}
}
if (expected_conflicts != -1 if (expected_conflicts != -1
&& src_total != expected_conflicts) && src_total != expected_conflicts)

View File

@@ -30,15 +30,15 @@
/* Buffer for storing the current token. */ /* Buffer for storing the current token. */
static struct obstack token_obstack; static struct obstack token_obstack;
char *token_buffer = NULL; const char *token_buffer = NULL;
bucket *symval; bucket *symval = NULL;
int numval; int numval;
/* A token to be reread, see unlex and lex. */ /* A token to be reread, see unlex and lex. */
static token_t unlexed = tok_undef; static token_t unlexed = tok_undef;
static bucket *unlexed_symval = NULL; static bucket *unlexed_symval = NULL;
static char *unlexed_token_buffer = NULL; static const char *unlexed_token_buffer = NULL;
void void
lex_init (void) lex_init (void)
@@ -554,9 +554,9 @@ token_t
parse_percent_token (void) parse_percent_token (void)
{ {
const struct option_table_struct *tx = NULL; const struct option_table_struct *tx = NULL;
/* Where `=' was found in token_buffer. */ const char *arg = NULL;
size_t equal_offset = 0; /* Where the ARG was found in token_buffer. */
char *arg = NULL; size_t arg_offset = 0;
int c = getc (finput); int c = getc (finput);
@@ -598,33 +598,34 @@ parse_percent_token (void)
c = getc (finput); c = getc (finput);
} }
/* %DIRECTIVE="ARG". Separate into
TOKEN_BUFFER = `%DIRECTIVE\0ARG\0'.
This is a bit hackish, but once we move to a Bison parser,
things will be cleaned up. */
if (c == '=') if (c == '=')
{ {
equal_offset = obstack_object_size (&token_obstack); /* End of the directive. We skip the `='. */
obstack_1grow (&token_obstack, c); obstack_1grow (&token_obstack, '\0');
/* Fetch the ARG if present. */
c = getc (finput); c = getc (finput);
if (c = '"') if (c == '"')
{ {
int code; /* ignored here */ int code;
arg_offset = obstack_object_size (&token_obstack);
obstack_1grow (&token_obstack, '"'); /* Read up to and including `"'. Do not append the closing
/* Read up to and including ". */ `"' in the output: it's not part of the ARG. */
while (literalchar (&token_obstack, &code, '"')) while (literalchar (NULL, &code, '"'))
/* nothing */; obstack_1grow (&token_obstack, code);
} }
/* else: should be an error. */
} }
else else
ungetc (c, finput); ungetc (c, finput);
obstack_1grow (&token_obstack, '\0'); obstack_1grow (&token_obstack, '\0');
token_buffer = obstack_finish (&token_obstack); token_buffer = obstack_finish (&token_obstack);
if (equal_offset) if (arg_offset)
{ arg = token_buffer + arg_offset;
/* %token_buffer="arg" */
arg = token_buffer + equal_offset + 2;
arg[strlen (arg) - 1] = '\0';
token_buffer[equal_offset] = '\0';
}
/* table lookup % directive */ /* table lookup % directive */
for (tx = option_table; tx->name; tx++) for (tx = option_table; tx->name; tx++)
@@ -647,7 +648,7 @@ parse_percent_token (void)
precedence. Side effect: if this %-option is used precedence. Side effect: if this %-option is used
several times, only the first is honored. Bah. */ several times, only the first is honored. Bah. */
if (!*((char **) (tx->set_flag))) if (!*((char **) (tx->set_flag)))
*((char **) (tx->set_flag)) = arg; *((char **) (tx->set_flag)) = xstrdup (arg);
} }
else else
fatal (_("`%s' requires an argument"), token_buffer); fatal (_("`%s' requires an argument"), token_buffer);

View File

@@ -57,7 +57,7 @@ typedef enum token_e
tok_obsolete tok_obsolete
} token_t; } token_t;
extern char *token_buffer; extern const char *token_buffer;
extern bucket *symval; extern bucket *symval;
extern int numval; extern int numval;

View File

@@ -1,5 +1,5 @@
/* Print information on generated parser, for bison, /* Print information on generated parser, for bison,
Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc. Copyright 1984, 1986, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler. This file is part of Bison, the GNU Compiler Compiler.
@@ -29,6 +29,7 @@
#include "state.h" #include "state.h"
#include "reader.h" #include "reader.h"
#include "print.h" #include "print.h"
#include "reduce.h"
#if 0 #if 0
static void static void