const char *skeleton = NULL;
int language_prio = default_prio;
struct bison_language const *language = &valid_languages[0];
-const char *include = NULL;
/** Decode an option's key.
*
'empty-rule' empty rules without %empty\n\
'precedence' useless precedence and associativity\n\
'other' all other warnings (enabled by default)\n\
- 'all' all the warnings\n\
+ 'all' all the warnings except 'yacc'\n\
'no-CATEGORY' turn off warnings in CATEGORY\n\
'none' turn off all the warnings\n\
'error[=CATEGORY]' treat warnings as errors\n\
"b:"
"d"
"f::"
- "e"
"g::"
"h"
"k"
"l"
- "n"
"o:"
"p:"
"r:"
/* Parser. */
{ "name-prefix", required_argument, 0, 'p' },
- { "include", required_argument, 0, 'I' },
/* Output. */
{ "file-prefix", required_argument, 0, 'b' },
{ "force-define", required_argument, 0, 'F' },
{ "locations", no_argument, 0, LOCATIONS_OPTION },
{ "no-lines", no_argument, 0, 'l' },
- { "raw", no_argument, 0, 0 },
{ "skeleton", required_argument, 0, 'S' },
{ "language", required_argument, 0, 'L' },
{ "token-table", no_argument, 0, 'k' },
};
/* Under DOS, there is no difference on the case. This can be
- troublesome when looking for `.tab' etc. */
+ troublesome when looking for '.tab' etc. */
#ifdef MSDOS
# define AS_FILE_NAME(File) (strlwr (File), (File))
#else
/* Certain long options cause getopt_long to return 0. */
break;
- case 'D': /* -DNAME[=VALUE]. */
- case 'F': /* -FNAME[=VALUE]. */
+ case 'D': /* -DNAME[=(VALUE|"VALUE"|{VALUE})]. */
+ case 'F': /* -FNAME[=(VALUE|"VALUE"|{VALUE})]. */
{
- char* name = optarg;
- char* value = strchr (optarg, '=');
+ char *name = optarg;
+ char *value = strchr (optarg, '=');
+ muscle_kind kind = muscle_keyword;
if (value)
- *value++ = 0;
+ {
+ char *end = value + strlen (value) - 1;
+ *value++ = 0;
+ if (*value == '{' && *end == '}')
+ {
+ kind = muscle_code;
+ ++value;
+ *end = 0;
+ }
+ else if (*value == '"' && *end == '"')
+ {
+ kind = muscle_string;
+ ++value;
+ *end = 0;
+ }
+ }
muscle_percent_define_insert (name, command_line_location (),
- value ? value : "",
+ kind, value ? value : "",
c == 'D' ? MUSCLE_PERCENT_DEFINE_D
: MUSCLE_PERCENT_DEFINE_F);
}
break;
- case 'I':
- include = AS_FILE_NAME (optarg);
- break;
-
case 'L':
language_argmatch (optarg, command_line_prio,
command_line_location ());
case 't':
muscle_percent_define_insert ("parse.trace",
- command_line_location (), "",
+ command_line_location (),
+ muscle_keyword, "",
MUSCLE_PERCENT_DEFINE_D);
break;