]> git.saurik.com Git - bison.git/blobdiff - src/getargs.c
* tests/regression.at (AT_TEST_CPP_GUARD_H): Adjust the clean up
[bison.git] / src / getargs.c
index 558faaf827cd13da739f4de4b6f6bf62917c8baa..e3ffdb68feeb3221072424c6d5e560cc21b688fc 100644 (file)
@@ -1,5 +1,5 @@
 /* Parse command line arguments for bison.
 /* Parse command line arguments for bison.
-   Copyright (C) 1984, 1986, 1989, 1992, 2000 Free Software Foundation, Inc.
+   Copyright 1984, 1986, 1989, 1992, 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.
 
 #include "getopt.h"
 #include "system.h"
 #include "files.h"
 #include "getopt.h"
 #include "system.h"
 #include "files.h"
-
-int verboseflag;
-int definesflag;
-int debugflag;
-int nolinesflag;
-int noparserflag = 0;
-int toknumflag = 0;
-int rawtoknumflag = 0;
-char *spec_name_prefix; /* for -p.  */
-char *spec_file_prefix; /* for -b. */
-extern int fixed_outfiles;/* for -y */
+#include "complain.h"
+#include "getargs.h"
+#include "xalloc.h"
+#include "options.h"
+
+int debug_flag = 0;
+int defines_flag = 0;
+int locations_flag = 0;
+int no_lines_flag = 0;
+int no_parser_flag = 0;
+int token_table_flag = 0;
+int verbose_flag = 0;
+int statistics_flag = 0;
+int yacc_flag = 0;     /* for -y */
+int graph_flag = 0;
+
+const char *skeleton = NULL;
 
 extern char *program_name;
 
 
 extern char *program_name;
 
-extern void warns PARAMS((char *, char *));    /* main.c */
-static void usage PARAMS((FILE *));
-extern void getargs PARAMS((int argc, char *[]));
-
-static struct option longopts[] =
-{
-  {"debug", 0, &debugflag, 1},
-  {"defines", 0, &definesflag, 1},
-  {"file-prefix", 1, 0, 'b'},
-  {"fixed-output-files", 0, &fixed_outfiles, 1},
-  {"help", 0, 0, 'h'},
-  {"name-prefix", 1, 0, 'p'}, /* was 'a';  apparently unused -wjh */
-  {"no-lines", 0, &nolinesflag, 1},
-  {"no-parser", 0, &noparserflag, 1},
-  {"output", 1, 0, 'o'},
-  {"output-file", 1, 0, 'o'},
-  {"raw", 0, &rawtoknumflag, 1},
-  {"token-table", 0, &toknumflag, 1},
-  {"verbose", 0, &verboseflag, 1},
-  {"version", 0, 0, 'V'},
-  {"yacc", 0, &fixed_outfiles, 1},
-  {0, 0, 0, 0}
-};
-
 /*---------------------------.
 | Display the help message.  |
 `---------------------------*/
 /*---------------------------.
 | Display the help message.  |
 `---------------------------*/
+
 static void
 usage (FILE *stream)
 {
 static void
 usage (FILE *stream)
 {
@@ -91,11 +74,12 @@ Operation modes:\n\
 
   fputs (_("\
 Parser:\n\
 
   fputs (_("\
 Parser:\n\
+  -S, --skeleton=FILE        specify the skeleton to use\n\
   -t, --debug                instrument the parser for debugging\n\
   -t, --debug                instrument the parser for debugging\n\
+      --locations            enable locations computation\n\
   -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
   -l, --no-lines             don't generate `#line' directives\n\
   -n, --no-parser            generate the tables only\n\
   -p, --name-prefix=PREFIX   prepend PREFIX to the external symbols\n\
   -l, --no-lines             don't generate `#line' directives\n\
   -n, --no-parser            generate the tables only\n\
-  -r, --raw                  number the tokens from 3\n\
   -k, --token-table          include a table of token names\n\
 "), stream);
   putc ('\n', stream);
   -k, --token-table          include a table of token names\n\
 "), stream);
   putc ('\n', stream);
@@ -105,101 +89,138 @@ Output:\n\
   -d, --defines              also produce a header file\n\
   -v, --verbose              also produce an explanation of the automaton\n\
   -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
   -d, --defines              also produce a header file\n\
   -v, --verbose              also produce an explanation of the automaton\n\
   -b, --file-prefix=PREFIX   specify a PREFIX for output files\n\
-  -o, --output-file=FILE     leave output to FILE\n"), stream);
+  -o, --output=FILE          leave output to FILE\n\
+  -g, --graph                also produce a VCG description of the automaton\n\
+"), stream);
   putc ('\n', stream);
 
   fputs (_("\
 Report bugs to <bug-bison@gnu.org>.\n"), stream);
 }
 
   putc ('\n', stream);
 
   fputs (_("\
 Report bugs to <bug-bison@gnu.org>.\n"), stream);
 }
 
+
+/*------------------------------.
+| Display the version message.  |
+`------------------------------*/
+
+static void
+version (FILE *stream)
+{
+  /* Some efforts were made to ease the translators' task, please
+     continue.  */
+  fprintf (stream, _("\
+bison (GNU Bison) %s"), VERSION);
+  putc ('\n', stream);
+  putc ('\n', stream);
+
+  fputs (_("\
+Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"),
+        stream);
+
+  fputs (_("\
+This is free software; see the source for copying conditions.  There is NO\n\
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
+"),
+        stream);
+}
+
+
+/*----------------------.
+| Process the options.  |
+`----------------------*/
+
 void
 getargs (int argc, char *argv[])
 {
 void
 getargs (int argc, char *argv[])
 {
-  register int c;
-
-  verboseflag = 0;
-  definesflag = 0;
-  debugflag = 0;
-  noparserflag = 0;
-  rawtoknumflag = 0;
-  toknumflag = 0;
-  fixed_outfiles = 0;
-
-  while ((c = getopt_long (argc, argv, "yvdhrltknVo:b:p:", longopts, (int *)0))
-        != EOF)
-    {
-      switch (c)
-       {
-       case 0:
-         /* Certain long options cause getopt_long to return 0.  */
-         break;
-
-       case 'y':
-         fixed_outfiles = 1;
-         break;
-
-       case 'h':
-         usage (stdout);
-         exit (0);
-
-       case 'V':
-         printf ("%s\n", VERSION_STRING);
-         exit (0);
-
-       case 'v':
-         verboseflag = 1;
-         break;
-
-       case 'd':
-         definesflag = 1;
-         break;
-
-       case 'l':
-         nolinesflag = 1;
-         break;
-
-       case 'k':
-         toknumflag = 1;
-         break;
-
-       case 'r':
-         rawtoknumflag = 1;
-         break;
-
-       case 'n':
-         noparserflag = 1;
-         break;
-
-       case 't':
-         debugflag = 1;
-         break;
-
-       case 'o':
-         spec_outfile = optarg;
-         break;
-
-       case 'b':
-         spec_file_prefix = optarg;
-         break;
-
-       case 'p':
-         spec_name_prefix = optarg;
-         break;
-
-       default:
-         usage (stderr);
-         exit (1);
-       }
-    }
-
+  int c;
+
+  create_long_option_table ();
+  while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
+    switch (c)
+      {
+      case 0:
+       /* Certain long options cause getopt_long to return 0.  */
+       break;
+
+      case 'y':
+       yacc_flag = 1;
+       break;
+
+      case 'h':
+       usage (stdout);
+       exit (0);
+
+      case 'V':
+       version (stdout);
+       exit (0);
+
+      case 'g':
+       /* Here, the -g and --graph=FILE options are differentiated.  */
+       graph_flag = 1;
+       spec_graph_file = optarg;
+       break;
+
+      case 'v':
+       verbose_flag = 1;
+       break;
+
+      case 'S':
+       skeleton = optarg;
+       break;
+
+      case 'd':
+       /* Here, the -d and --defines options are differentiated.  */
+       defines_flag = 1;
+       spec_defines_file = optarg;
+       break;
+
+      case 'l':
+       no_lines_flag = 1;
+       break;
+
+      case 'k':
+       token_table_flag = 1;
+       break;
+
+      case 'r':
+       fatal (_("`%s' is no longer supported"), "--raw");
+       break;
+
+      case 'n':
+       no_parser_flag = 1;
+       break;
+
+      case 't':
+       debug_flag = 1;
+       break;
+
+      case 'o':
+       spec_outfile = optarg;
+       break;
+
+      case 'b':
+       spec_file_prefix = optarg;
+       break;
+
+      case 'p':
+       spec_name_prefix = optarg;
+       break;
+
+      default:
+       fprintf (stderr, _("Try `%s --help' for more information.\n"),
+                program_name);
+       exit (1);
+      }
+
+  XFREE (longopts);
   if (optind == argc)
     {
   if (optind == argc)
     {
-      fprintf(stderr, _("%s: no grammar file given\n"), program_name);
-      exit(1);
+      fprintf (stderr, _("%s: no grammar file given\n"), program_name);
+      exit (1);
     }
   if (optind < argc - 1)
     }
   if (optind < argc - 1)
-    fprintf(stderr, _("%s: extra arguments ignored after `%s'\n"),
-           program_name, argv[optind]);
+    fprintf (stderr, _("%s: extra arguments ignored after `%s'\n"),
+            program_name, argv[optind]);
 
   infile = argv[optind];
 }
 
   infile = argv[optind];
 }