X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f16b08196c780556cbf50691e2944960aebc46f6..e1b74b92a02af45029e19ebd0d2628da3fd01759:/src/getargs.c diff --git a/src/getargs.c b/src/getargs.c index 981e5d53..c9fc9bfc 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -1,7 +1,7 @@ /* Parse command line arguments for Bison. Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -20,7 +20,7 @@ #include #include "system.h" -#include "revision.h" +#include "output.h" #include #include @@ -48,6 +48,7 @@ bool debug_flag; bool defines_flag; bool graph_flag; +bool xml_flag; bool locations_flag; bool no_lines_flag; bool token_table_flag; @@ -57,9 +58,6 @@ bool error_verbose = false; bool nondeterministic_parser = false; bool glr_parser = false; -bool pull_parser = true; -bool pure_parser = false; -bool push_parser = false; int report_flag = report_none; int trace_flag = trace_none; @@ -254,6 +252,9 @@ Generate LALR(1) and GLR parsers.\n\ fputs (_("\ Mandatory arguments to long options are mandatory for short options too.\n\ +"), stdout); + fputs (_("\ +The same is true for optional arguments.\n\ "), stdout); fputs (_("\ @@ -262,12 +263,16 @@ Operation modes:\n\ -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\ + --print-datadir output directory containing skeletons and XSLT\n\ -y, --yacc emulate POSIX Yacc\n\ + -W, --warnings=[CATEGORY] report the warnings falling in CATEGORY\n\ \n\ "), stdout); fputs (_("\ Parser:\n\ + -L, --language=LANGUAGE specify the output programming language\n\ + (this is an experimental feature)\n\ -S, --skeleton=FILE specify the skeleton to use\n\ -t, --debug instrument the parser for debugging\n\ --locations enable locations computation\n\ @@ -277,14 +282,31 @@ Parser:\n\ \n\ "), stdout); + /* Keep -d and --defines separate so that ../build-aux/cross-options.pl + * won't assume that -d also takes an argument. */ fputs (_("\ Output:\n\ - -d, --defines also produce a header file\n\ + --defines[=FILE] also produce a header file\n\ + -d likewise but cannot specify FILE (for POSIX Yacc)\n\ -r, --report=THINGS also produce details on the automaton\n\ + --report-file=FILE write report to FILE\n\ -v, --verbose same as `--report=state'\n\ -b, --file-prefix=PREFIX specify a PREFIX for output files\n\ -o, --output=FILE leave output to FILE\n\ - -g, --graph also output a graph of the automaton\n\ + -g, --graph[=FILE] also output a graph of the automaton\n\ + -x, --xml[=FILE] also output an XML report of the automaton\n\ + (the XML schema is experimental)\n\ +\n\ +"), stdout); + + fputs (_("\ +Warning categories include:\n\ + `midrule-values' unset or unused midrule values\n\ + `yacc' incompatibilities with POSIX YACC\n\ + `all' all the warnings\n\ + `no-CATEGORY' turn off warnings in CATEGORY\n\ + `none' turn off all the warnings\n\ + `error' treat warnings as errors\n\ \n\ "), stdout); @@ -316,12 +338,12 @@ version (void) continue. */ printf (_("bison (GNU Bison) %s"), VERSION); putc ('\n', stdout); - printf ("%s", revision); fputs (_("Written by Robert Corbett and Richard Stallman.\n"), stdout); putc ('\n', stdout); fprintf (stdout, - _("Copyright (C) %d Free Software Foundation, Inc.\n"), 2006); + _("Copyright (C) %d Free Software Foundation, Inc.\n"), + PACKAGE_COPYRIGHT_YEAR); fputs (_("\ This is free software; see the source for copying conditions. There is NO\n\ @@ -386,14 +408,38 @@ language_argmatch (char const *arg, int prio, location const *loc) | Process the options. | `----------------------*/ -/* Shorts options. */ -static char const short_options[] = "yvegdhr:L:ltknVo:b:p:S:T::W"; +/* Shorts options. + Should be computed from long_options. */ +static char const short_options[] = + "L:" + "S:" + "T::" + "V" + "W::" + "b:" + "d" + "e" + "g::" + "h" + "k" + "l" + "n" + "o:" + "p:" + "r:" + "t" + "v" + "x::" + "y" + ; /* Values for long options that do not have single-letter equivalents. */ enum { LOCATIONS_OPTION = CHAR_MAX + 1, - PRINT_LOCALEDIR_OPTION + PRINT_LOCALEDIR_OPTION, + PRINT_DATADIR_OPTION, + REPORT_FILE_OPTION }; static struct option const long_options[] = @@ -402,6 +448,7 @@ static struct option const long_options[] = { "help", no_argument, 0, 'h' }, { "version", no_argument, 0, 'V' }, { "print-localedir", no_argument, 0, PRINT_LOCALEDIR_OPTION }, + { "print-datadir", no_argument, 0, PRINT_DATADIR_OPTION }, { "warnings", optional_argument, 0, 'W' }, /* Parser. */ @@ -413,7 +460,9 @@ static struct option const long_options[] = { "output", required_argument, 0, 'o' }, { "output-file", required_argument, 0, 'o' }, { "graph", optional_argument, 0, 'g' }, + { "xml", optional_argument, 0, 'x' }, { "report", required_argument, 0, 'r' }, + { "report-file", required_argument, 0, REPORT_FILE_OPTION }, { "verbose", no_argument, 0, 'v' }, /* Hidden. */ @@ -459,19 +508,16 @@ getargs (int argc, char *argv[]) /* Certain long options cause getopt_long to return 0. */ break; - case 'b': - spec_file_prefix = AS_FILE_NAME (optarg); - break; - - case 'g': - /* Here, the -g and --graph=FILE options are differentiated. */ - graph_flag = true; + case 'd': + /* Here, the -d and --defines options are differentiated. */ + defines_flag = true; if (optarg) - spec_graph_file = xstrdup (AS_FILE_NAME (optarg)); + spec_defines_file = xstrdup (AS_FILE_NAME (optarg)); break; - case 'h': - usage (EXIT_SUCCESS); + case 'I': + include = AS_FILE_NAME (optarg); + break; case 'L': language_argmatch (optarg, 0, NULL); @@ -481,17 +527,34 @@ getargs (int argc, char *argv[]) skeleton_arg (AS_FILE_NAME (optarg), 0, NULL); break; - case 'I': - include = AS_FILE_NAME (optarg); + case 'T': + FLAGS_ARGMATCH (trace, optarg); break; - case 'd': - /* Here, the -d and --defines options are differentiated. */ - defines_flag = true; + case 'V': + version (); + exit (EXIT_SUCCESS); + + case 'W': if (optarg) - spec_defines_file = xstrdup (AS_FILE_NAME (optarg)); + FLAGS_ARGMATCH (warnings, optarg); + else + warnings_flag |= warnings_all; + break; + + case 'b': + spec_file_prefix = AS_FILE_NAME (optarg); + break; + + case 'g': + graph_flag = true; + if (optarg) + spec_graph_file = xstrdup (AS_FILE_NAME (optarg)); break; + case 'h': + usage (EXIT_SUCCESS); + case 'k': token_table_flag = true; break; @@ -512,31 +575,22 @@ getargs (int argc, char *argv[]) FLAGS_ARGMATCH (report, optarg); break; - case 'T': - FLAGS_ARGMATCH (trace, optarg); - break; - case 't': debug_flag = true; break; - case 'V': - version (); - exit (EXIT_SUCCESS); - case 'v': report_flag |= report_states; break; - case 'y': - yacc_flag = true; + case 'x': + xml_flag = true; + if (optarg) + spec_xml_file = xstrdup (AS_FILE_NAME (optarg)); break; - case 'W': - if (optarg) - FLAGS_ARGMATCH (warnings, optarg); - else - warnings_flag |= warnings_all; + case 'y': + yacc_flag = true; break; case LOCATIONS_OPTION: @@ -547,6 +601,14 @@ getargs (int argc, char *argv[]) printf ("%s\n", LOCALEDIR); exit (EXIT_SUCCESS); + case PRINT_DATADIR_OPTION: + printf ("%s\n", compute_pkgdatadir ()); + exit (EXIT_SUCCESS); + + case REPORT_FILE_OPTION: + spec_verbose_file = xstrdup (AS_FILE_NAME (optarg)); + break; + default: usage (EXIT_FAILURE); }