/* Parse command line arguments for Bison.
Copyright (C) 1984, 1986, 1989, 1992, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
"grammar - reading, reducing the grammar",
"resource - memory consumption (where available)",
"sets - grammar sets: firsts, nullable etc.",
+ "muscles - m4 definitions passed to the skeleton",
"tools - m4 invocation",
"m4 - m4 traces",
"skeleton - skeleton postprocessing",
"time - time consumption",
+ "ielr - IELR conversion",
"all - all of the above",
0
};
trace_grammar,
trace_resource,
trace_sets,
+ trace_muscles,
trace_tools,
trace_m4,
trace_skeleton,
trace_time,
+ trace_ielr,
trace_all
};
that argmatch_valid be more readable. */
"none - no warnings",
"midrule-values - unset or unused midrule values",
- "yacc - incompatibilities with POSIX YACC",
+ "yacc - incompatibilities with POSIX Yacc",
"all - all of the above",
"error - warnings are errors",
0
program_name);
else
{
+ /* For ../build-aux/cross-options.pl to work, use the format:
+ ^ -S, --long[=ARGS] (whitespace)
+ A --long option is required.
+ Otherwise, add exceptions to ../build-aux/cross-options.pl. */
+
printf (_("Usage: %s [OPTION]... FILE\n"), program_name);
fputs (_("\
-Generate LALR(1) and GLR parsers.\n\
+Generate a deterministic or GLR parser employing LALR(1), IELR(1), or\n\
+canonical LR(1) parser tables.\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 location support\n\
- -D, --define=NAME[=VALUE] same as `%define NAME \"VALUE\"'\n\
- -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
- -l, --no-lines don't generate `#line' directives\n\
- -k, --token-table include a table of token names\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 location support\n\
+ -D, --define=NAME[=VALUE] similar to `%define NAME \"VALUE\"'\n\
+ -F, --force-define=NAME[=VALUE] override `%define NAME \"VALUE\"'\n\
+ -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
+ -l, --no-lines don't generate `#line' directives\n\
+ -k, --token-table include a table of token names\n\
\n\
"), stdout);
fputs (_("\
Warning categories include:\n\
`midrule-values' unset or unused midrule values\n\
- `yacc' incompatibilities with POSIX YACC\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\
skeleton = arg;
}
else if (prio == skeleton_prio)
- {
- char const *msg =
- _("multiple skeleton declarations are invalid");
- complain_at (loc, msg);
- }
+ complain_at (loc, _("multiple skeleton declarations are invalid"));
}
void
Should be computed from long_options. */
static char const short_options[] =
"D:"
+ "F:"
"L:"
"S:"
"T::"
/* Parser. */
{ "debug", no_argument, 0, 't' },
{ "define", required_argument, 0, 'D' },
+ { "force-define", required_argument, 0, 'F' },
{ "locations", no_argument, 0, LOCATIONS_OPTION },
{ "no-lines", no_argument, 0, 'l' },
{ "raw", no_argument, 0, 0 },
break;
case 'D': /* -DNAME[=VALUE]. */
+ case 'F': /* -FNAME[=VALUE]. */
{
char* name = optarg;
char* value = strchr (optarg, '=');
if (value)
*value++ = 0;
- else
- value = "";
- muscle_percent_define_insert (name, command_line_location (), value);
+ muscle_percent_define_insert (name, command_line_location (),
+ value ? value : "",
+ c == 'D' ? MUSCLE_PERCENT_DEFINE_D
+ : MUSCLE_PERCENT_DEFINE_F);
}
break;
current_file = grammar_file = uniqstr_new (argv[optind]);
MUSCLE_INSERT_C_STRING ("file_name", grammar_file);
}
+
+void
+tr (char *s, char from, char to)
+{
+ for (; *s; s++)
+ if (*s == from)
+ *s = to;
+}