X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/42f95d63c2cdefffd471f76e6c64af7e4872ba24..1853982561f87a729024577156def20433035946:/src/main.c diff --git a/src/main.c b/src/main.c index 3ef6683e..58939d92 100644 --- a/src/main.c +++ b/src/main.c @@ -1,21 +1,22 @@ /* Top level entry point of bison, - Copyright (C) 1984, 1986, 1989, 1992, 1995 Free Software Foundation, Inc. + Copyright (C) 1984, 1986, 1989, 1992, 1995, 2000 Free Software Foundation, Inc. -This file is part of Bison, the GNU Compiler Compiler. + 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 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. + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + 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. */ #include @@ -24,6 +25,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ extern int lineno; extern int verboseflag; +extern char *infile; /* Nonzero means failure has been detected; don't write a parser file. */ int failure; @@ -31,18 +33,37 @@ int failure; /* The name this program was run with, for messages. */ char *program_name; -extern void getargs(), openfiles(), reader(), reduce_grammar(); -extern void set_derives(), set_nullable(), generate_states(); -extern void lalr(), initialize_conflicts(), verbose(), terse(); -extern void output(), done(); +char *printable_version PARAMS((int)); +char *int_to_string PARAMS((int)); +void fatal PARAMS((char *)); +void fatals PARAMS((char *, char *)); +void warn PARAMS((char *)); +void warni PARAMS((char *, int)); +void warns PARAMS((char *, char *)); +void warnss PARAMS((char *, char *, char *)); +void warnsss PARAMS((char *, char *, char *, char *)); +void toomany PARAMS((char *)); +void berror PARAMS((char *)); + +extern void getargs PARAMS((int, char *[])); +extern void openfiles PARAMS((void)); +extern void reader PARAMS((void)); +extern void reduce_grammar PARAMS((void)); +extern void set_derives PARAMS((void)); +extern void set_nullable PARAMS((void)); +extern void generate_states PARAMS((void)); +extern void lalr PARAMS((void)); +extern void initialize_conflicts PARAMS((void)); +extern void verbose PARAMS((void)); +extern void terse PARAMS((void)); +extern void output PARAMS((void)); +extern void done PARAMS((int)); /* VMS complained about using `int'. */ int -main(argc, argv) - int argc; - char *argv[]; +main (int argc, char *argv[]) { program_name = argv[0]; setlocale (LC_ALL, ""); @@ -100,8 +121,7 @@ main(argc, argv) either C itself, or the corresponding \DDD code. */ char * -printable_version(c) - int c; +printable_version (int c) { static char buf[10]; if (c < ' ' || c >= '\177') @@ -118,27 +138,40 @@ printable_version(c) Return a ptr to internal memory containing the string. */ char * -int_to_string(i) - int i; +int_to_string (int i) { static char buf[20]; sprintf(buf, "%d", i); return buf; } -/* Print the message S for a fatal error. */ +/* Display filename and lino if available. */ -void -fatal(s) - char *s; +static void +banner (void) { - extern char *infile; - if (infile == 0) - fprintf(stderr, _("fatal error: %s\n"), s); + fprintf(stderr, "%s: ", program_name); else - fprintf(stderr, _("\"%s\", line %d: %s\n"), infile, lineno, s); - done(1); + fprintf(stderr, "%s:%d: ", infile, lineno); +} + +static void +fatal_banner (void) +{ + banner (); + fputs (_("fatal error: "), stderr); +} + +/* Print the message S for a fatal error. */ + +void +fatal (char *s) +{ + fatal_banner (); + fputs (s, stderr); + fputc ('\n', stderr); + done (1); } @@ -146,98 +179,92 @@ fatal(s) and incorporate string X1. */ void -fatals(fmt, x1) - char *fmt, *x1; +fatals (char *fmt, char *x1) { - char buffer[200]; - sprintf(buffer, fmt, x1); - fatal(buffer); + fatal_banner (); + fprintf (stderr, fmt, x1); + fputc ('\n', stderr); + done (1); +} + +static void +warn_banner (void) +{ + banner (); + failure = 1; } /* Print a warning message S. */ void -warn(s) - char *s; +warn (char *s) { - extern char *infile; - - if (infile == 0) - fprintf(stderr, _("error: %s\n"), s); - else - fprintf(stderr, _("(\"%s\", line %d) error: %s\n"), - infile, lineno, s); - - failure = 1; + warn_banner (); + fputs (s, stderr); + fputc ('\n', stderr); } /* Print a warning message containing the string for the integer X1. The message is given by the format FMT. */ void -warni(fmt, x1) - char *fmt; - int x1; +warni (char *fmt, int x1) { - char buffer[200]; - sprintf(buffer, fmt, x1); - warn(buffer); + warn_banner (); + fprintf (stderr, fmt, x1); + fputc ('\n', stderr); } /* Print a warning message containing the string X1. The message is given by the format FMT. */ void -warns(fmt, x1) - char *fmt, *x1; +warns (char *fmt, char *x1) { - char buffer[200]; - sprintf(buffer, fmt, x1); - warn(buffer); + warn_banner (); + fprintf (stderr, fmt, x1); + fputc ('\n', stderr); } /* Print a warning message containing the two strings X1 and X2. The message is given by the format FMT. */ void -warnss(fmt, x1, x2) - char *fmt, *x1, *x2; +warnss (char *fmt, char *x1, char *x2) { - char buffer[200]; - sprintf(buffer, fmt, x1, x2); - warn(buffer); + warn_banner (); + fprintf (stderr, fmt, x1, x2); + fputc ('\n', stderr); } /* Print a warning message containing the 3 strings X1, X2, X3. The message is given by the format FMT. */ void -warnsss(fmt, x1, x2, x3) - char *fmt, *x1, *x2, *x3; +warnsss (char *fmt, char *x1, char *x2, char *x3) { - char buffer[200]; - sprintf(buffer, fmt, x1, x2, x3); - warn(buffer); + warn_banner (); + fprintf (stderr, fmt, x1, x2, x3); + fputc ('\n', stderr); } /* Print a message for the fatal occurence of more than MAXSHORT instances of whatever is denoted by the string S. */ void -toomany(s) - char *s; +toomany (char *s) { - char buffer[200]; - sprintf(buffer, _("limit of %d exceeded, too many %s"), MAXSHORT, s); - fatal(buffer); + fatal_banner (); + fprintf (stderr, _("too many %s (max %d)"), s, MAXSHORT); + fputc ('\n', stderr); + done (1); } /* Abort for an internal error denoted by string S. */ void -berror(s) - char *s; +berror (char *s) { - fprintf(stderr, _("internal error, %s\n"), s); + fprintf(stderr, _("%s: internal error: %s\n"), program_name, s); abort(); }