]> git.saurik.com Git - bison.git/blobdiff - src/getargs.c
* data/glr.c (YYCHK1): Do not assume YYE is in range.
[bison.git] / src / getargs.c
index 0113f3370f5e877773394d0cf35bf0bf8b5e2a1e..0170f8e34fd4e4516043ee0b13f4e8887d38f5b7 100644 (file)
@@ -1,5 +1,6 @@
-/* Parse command line arguments for bison.
-   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002
+/* Parse command line arguments for Bison.
+
+   Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
    Free Software Foundation, Inc.
 
    This file is part of Bison, the GNU Compiler Compiler.
 
    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
 
    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.  */
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
 
 #include "system.h"
 
 #include "system.h"
-#include "getopt.h"
-#include "argmatch.h"
-#include "error.h"
+
+#include <argmatch.h>
+#include <error.h>
+
+/* Hack to get <getopt.h> to declare getopt with a prototype.  */
+#if lint && ! defined __GNU_LIBRARY__
+# define __GNU_LIBRARY__
+# define HACK_FOR___GNU_LIBRARY___PROTOTYPE 1
+#endif
+
+#include <getopt.h>
+
+#ifdef HACK_FOR___GNU_LIBRARY___PROTOTYPE
+# undef __GNU_LIBRARY__
+# undef HACK_FOR___GNU_LIBRARY___PROTOTYPE
+#endif
+
 #include "complain.h"
 #include "complain.h"
-#include "struniq.h"
-#include "getargs.h"
 #include "files.h"
 #include "files.h"
+#include "getargs.h"
+#include "uniqstr.h"
 
 
-int debug_flag = 0;
-int defines_flag = 0;
-int locations_flag = 0;
-int no_lines_flag = 0;
-int no_parser_flag = 0;
+bool debug_flag;
+bool defines_flag;
+bool locations_flag;
+bool no_lines_flag;
+bool no_parser_flag;
 int report_flag = report_none;
 int report_flag = report_none;
-int token_table_flag = 0;
-int yacc_flag = 0;     /* for -y */
-int graph_flag = 0;
+bool token_table_flag;
+bool yacc_flag;        /* for -y */
+bool graph_flag;
 int trace_flag = trace_none;
 
 int trace_flag = trace_none;
 
+bool nondeterministic_parser = false;
+bool glr_parser = false;
+bool pure_parser = false;
+
 const char *skeleton = NULL;
 const char *include = NULL;
 
 const char *skeleton = NULL;
 const char *include = NULL;
 
@@ -88,7 +107,7 @@ static const int trace_types[] =
 static void
 trace_argmatch (char *args)
 {
 static void
 trace_argmatch (char *args)
 {
-  ARGMATCH_ASSERT (trace_args, trace_types);
+  verify (trace_constraint, ARGMATCH_CONSTRAINT (trace_args, trace_types));
   if (args)
     {
       args = strtok (args, ",");
   if (args)
     {
       args = strtok (args, ",");
@@ -119,7 +138,7 @@ static const char * const report_args[] =
   "none",
   "state", "states",
   "itemset", "itemsets",
   "none",
   "state", "states",
   "itemset", "itemsets",
-  "lookahead", "lookaheads",
+  "look-ahead", "lookahead", "lookaheads",
   "solved",
   "all",
   0
   "solved",
   "all",
   0
@@ -130,7 +149,9 @@ static const int report_types[] =
   report_none,
   report_states, report_states,
   report_states | report_itemsets, report_states | report_itemsets,
   report_none,
   report_states, report_states,
   report_states | report_itemsets, report_states | report_itemsets,
-  report_states | report_lookaheads, report_states | report_lookaheads,
+  report_states | report_look_ahead_tokens,
+  report_states | report_look_ahead_tokens,
+  report_states | report_look_ahead_tokens,
   report_states | report_solved_conflicts,
   report_all
 };
   report_states | report_solved_conflicts,
   report_all
 };
@@ -139,7 +160,7 @@ static const int report_types[] =
 static void
 report_argmatch (char *args)
 {
 static void
 report_argmatch (char *args)
 {
-  ARGMATCH_ASSERT (report_args, report_types);
+  verify (report_constraint, ARGMATCH_CONSTRAINT (report_args, report_types));
   args = strtok (args, ",");
   do
     {
   args = strtok (args, ",");
   do
     {
@@ -186,9 +207,10 @@ for the equivalent short option also.  Similarly for optional arguments.\n"),
 
       fputs (_("\
 Operation modes:\n\
 
       fputs (_("\
 Operation modes:\n\
-  -h, --help      display this help and exit\n\
-  -V, --version   output version information and exit\n\
-  -y, --yacc      emulate POSIX yacc\n"), stdout);
+  -h, --help                 display this help and exit\n\
+  -V, --version              output version information and exit\n\
+      --print-localedir      output directory containing locale-dependent data\n\
+  -y, --yacc                 emulate POSIX yacc\n"), stdout);
       putc ('\n', stdout);
 
       fputs (_("\
       putc ('\n', stdout);
 
       fputs (_("\
@@ -218,7 +240,7 @@ Output:\n\
 THINGS is a list of comma separated words that can include:\n\
   `state'        describe the states\n\
   `itemset'      complete the core item sets with their closure\n\
 THINGS is a list of comma separated words that can include:\n\
   `state'        describe the states\n\
   `itemset'      complete the core item sets with their closure\n\
-  `lookahead'    explicitly associate lookaheads to items\n\
+  `look-ahead'   explicitly associate look-ahead tokens to items\n\
   `solved'       describe shift/reduce conflicts solving\n\
   `all'          include all the above information\n\
   `none'         disable the report\n\
   `solved'       describe shift/reduce conflicts solving\n\
   `all'          include all the above information\n\
   `none'         disable the report\n\
@@ -248,7 +270,7 @@ version (void)
   putc ('\n', stdout);
 
   fprintf (stdout,
   putc ('\n', stdout);
 
   fprintf (stdout,
-          _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2002);
+          _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2005);
 
   fputs (_("\
 This is free software; see the source for copying conditions.  There is NO\n\
 
   fputs (_("\
 This is free software; see the source for copying conditions.  There is NO\n\
@@ -263,13 +285,21 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 `----------------------*/
 
 /* Shorts options.  */
 `----------------------*/
 
 /* Shorts options.  */
-const char *short_options = "yvegdhr:ltknVo:b:p:S:T::";
+static char const short_options[] = "yvegdhr:ltknVo:b:p:S:T::";
+
+/* Values for long options that do not have single-letter equivalents.  */
+enum
+{
+  LOCATIONS_OPTION = CHAR_MAX + 1,
+  PRINT_LOCALEDIR_OPTION
+};
 
 static struct option const long_options[] =
 {
   /* Operation modes. */
 
 static struct option const long_options[] =
 {
   /* Operation modes. */
-  { "help",          no_argument,              0,   'h' },
-  { "version",       no_argument,              0,   'V' },
+  { "help",            no_argument,    0,   'h' },
+  { "version",         no_argument,    0,   'V' },
+  { "print-localedir", no_argument,    0,   PRINT_LOCALEDIR_OPTION },
 
   /* Parser. */
   { "name-prefix",   required_argument,          0,   'p' },
 
   /* Parser. */
   { "name-prefix",   required_argument,          0,   'p' },
@@ -295,7 +325,7 @@ static struct option const long_options[] =
 
   /* Parser.  */
   { "debug",         no_argument,               0,   't' },
 
   /* Parser.  */
   { "debug",         no_argument,               0,   't' },
-  { "locations",      no_argument, &locations_flag,     1 },
+  { "locations",      no_argument,              0, LOCATIONS_OPTION },
   { "no-lines",       no_argument,               0,   'l' },
   { "no-parser",      no_argument,               0,   'n' },
   { "raw",            no_argument,               0,     0 },
   { "no-lines",       no_argument,               0,   'l' },
   { "no-parser",      no_argument,               0,   'n' },
   { "raw",            no_argument,               0,     0 },
@@ -318,7 +348,8 @@ getargs (int argc, char *argv[])
 {
   int c;
 
 {
   int c;
 
-  while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != EOF)
+  while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
+        != -1)
     switch (c)
       {
       case 0:
     switch (c)
       {
       case 0:
@@ -326,7 +357,7 @@ getargs (int argc, char *argv[])
        break;
 
       case 'y':
        break;
 
       case 'y':
-       yacc_flag = 1;
+       yacc_flag = true;
        break;
 
       case 'h':
        break;
 
       case 'h':
@@ -336,10 +367,15 @@ getargs (int argc, char *argv[])
        version ();
        exit (EXIT_SUCCESS);
 
        version ();
        exit (EXIT_SUCCESS);
 
+      case PRINT_LOCALEDIR_OPTION:
+       printf ("%s\n", LOCALEDIR);
+       exit (EXIT_SUCCESS);
+
       case 'g':
        /* Here, the -g and --graph=FILE options are differentiated.  */
       case 'g':
        /* Here, the -g and --graph=FILE options are differentiated.  */
-       graph_flag = 1;
-       spec_graph_file = AS_FILE_NAME (optarg);
+       graph_flag = true;
+       if (optarg)
+         spec_graph_file = AS_FILE_NAME (optarg);
        break;
 
       case 'v':
        break;
 
       case 'v':
@@ -356,25 +392,29 @@ getargs (int argc, char *argv[])
 
       case 'd':
        /* Here, the -d and --defines options are differentiated.  */
 
       case 'd':
        /* Here, the -d and --defines options are differentiated.  */
-       defines_flag = 1;
+       defines_flag = true;
        if (optarg)
          spec_defines_file = AS_FILE_NAME (optarg);
        break;
 
       case 'l':
        if (optarg)
          spec_defines_file = AS_FILE_NAME (optarg);
        break;
 
       case 'l':
-       no_lines_flag = 1;
+       no_lines_flag = true;
+       break;
+
+      case LOCATIONS_OPTION:
+       locations_flag = true;
        break;
 
       case 'k':
        break;
 
       case 'k':
-       token_table_flag = 1;
+       token_table_flag = true;
        break;
 
       case 'n':
        break;
 
       case 'n':
-       no_parser_flag = 1;
+       no_parser_flag = true;
        break;
 
       case 't':
        break;
 
       case 't':
-       debug_flag = 1;
+       debug_flag = true;
        break;
 
       case 'o':
        break;
 
       case 'o':
@@ -410,5 +450,5 @@ getargs (int argc, char *argv[])
       usage (EXIT_FAILURE);
     }
 
       usage (EXIT_FAILURE);
     }
 
-  current_file = grammar_file = struniq_new (argv[optind]);
+  current_file = grammar_file = uniqstr_new (argv[optind]);
 }
 }