* getargs.c (skeleton): New variable.

(longopts): --skeleton is a new option.
(shortopts, getargs): -S is a new option.
* getargs.h: Declare skeleton.
* output.c (output_parser): Use it.
This commit is contained in:
Akim Demaille
2001-03-16 15:16:08 +00:00
parent 5141b01619
commit cd5bd6ac4f
10 changed files with 104 additions and 72 deletions

View File

@@ -1,3 +1,11 @@
2001-03-16 Akim Demaille <akim@epita.fr>
* getargs.c (skeleton): New variable.
(longopts): --skeleton is a new option.
(shortopts, getargs): -S is a new option.
* getargs.h: Declare skeleton.
* output.c (output_parser): Use it.
2001-03-16 Akim Demaille <akim@epita.fr> 2001-03-16 Akim Demaille <akim@epita.fr>
* m4/strerror_r.m4: New. * m4/strerror_r.m4: New.

5
NEWS
View File

@@ -11,6 +11,11 @@ Changes in version 1.28a:
* Added `--locations' and `%locations'. * Added `--locations' and `%locations'.
* Added `-S' and `--skeleton'.
* Special characters are escaped when output. This solves the problems
of the #line lines with path names including backslashes.
* New directives. * New directives.
`%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose', and `%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose', and
`%debug'. `%debug'.

View File

@@ -34,7 +34,7 @@ bison.info-1: 1306
bison.info-2: 50276 bison.info-2: 50276
bison.info-3: 98079 bison.info-3: 98079
bison.info-4: 147596 bison.info-4: 147596
bison.info-5: 191991 bison.info-5: 192129
 
Tag Table: Tag Table:
(Indirect) (Indirect)
@@ -124,11 +124,11 @@ Node: Tie-in Recovery172317
Node: Debugging174489 Node: Debugging174489
Node: Invocation177790 Node: Invocation177790
Node: Bison Options178520 Node: Bison Options178520
Node: Environment Variables181893 Node: Environment Variables182031
Node: Option Cross Key182741 Node: Option Cross Key182879
Node: VMS Invocation183631 Node: VMS Invocation183769
Node: Table of Symbols184415 Node: Table of Symbols184553
Node: Glossary191991 Node: Glossary192129
Node: Index198281 Node: Index198419
 
End Tag Table End Tag Table

View File

@@ -846,6 +846,11 @@ Operations modes:
Tuning the parser: Tuning the parser:
`-S FILE'
`--skeleton=FILE'
Specify the skeleton to use. You probably don't need this option
unless you are developing Bison.
`-t' `-t'
`--debug' `--debug'
Output a definition of the macro `YYDEBUG' into the parser file, so Output a definition of the macro `YYDEBUG' into the parser file, so

View File

@@ -4984,6 +4984,11 @@ bison -y $*
Tuning the parser: Tuning the parser:
@table @option @table @option
@item -S @var{file}
@itemx --skeleton=@var{file}
Specify the skeleton to use. You probably don't need this option unless
you are developing Bison.
@item -t @item -t
@itemx --debug @itemx --debug
Output a definition of the macro @code{YYDEBUG} into the parser file, so Output a definition of the macro @code{YYDEBUG} into the parser file, so

View File

@@ -1,3 +1,3 @@
@set UPDATED 18 January 2001 @set UPDATED 16 March 2001
@set EDITION 1.28a @set EDITION 1.28a
@set VERSION 1.28a @set VERSION 1.28a

View File

@@ -43,6 +43,7 @@ Operation modes:\n\
-y, --yacc emulate POSIX yacc\n", 26}, -y, --yacc emulate POSIX yacc\n", 26},
{"\ {"\
Parser:\n\ 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\ --locations enable locations computation\n\
-p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\ -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
@@ -58,7 +59,8 @@ Output:\n\
-o, --output-file=FILE leave output to FILE\n", 28}, -o, --output-file=FILE leave output to FILE\n", 28},
{"Report bugs to <bug-bison@gnu.org>.\n", 29}, {"Report bugs to <bug-bison@gnu.org>.\n", 29},
{"bison (GNU Bison) %s", 30}, {"bison (GNU Bison) %s", 30},
{"Copyright 1984, 1986, 1989, 1992, 2000 Free Software Foundation, Inc.\n", 31}, {"\
Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n", 31},
{"\ {"\
This is free software; see the source for copying conditions. There is NO\n\ 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", 32}, warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", 32},

View File

@@ -1,5 +1,5 @@
/* Parse command line arguments for bison. /* Parse command line arguments for bison.
Copyright 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.
@@ -30,13 +30,14 @@ int locations_flag = 0;
int no_lines_flag = 0; int no_lines_flag = 0;
int no_parser_flag = 0; int no_parser_flag = 0;
int raw_flag = 0; int raw_flag = 0;
char *skeleton = 0;
int token_table_flag = 0; int token_table_flag = 0;
int verbose_flag = 0; int verbose_flag = 0;
int statistics_flag = 0; int statistics_flag = 0;
int yacc_flag = 0; /* for -y */ int yacc_flag = 0; /* for -y */
extern char *program_name; extern char *program_name;
const char *shortopts = "yvdhrltknVo:b:p:"; const char *shortopts = "yvdhrltknVo:b:p:S:";
static struct option longopts[] = static struct option longopts[] =
{ {
/* Operation modes. */ /* Operation modes. */
@@ -46,6 +47,8 @@ static struct option longopts[] =
{"fixed-output-files",no_argument, 0, 'y'}, {"fixed-output-files",no_argument, 0, 'y'},
/* Parser. */ /* Parser. */
{"skeleton", required_argument, 0, 'S'},
{"debug", no_argument, 0, 'd'},
{"locations", no_argument, &locations_flag, 1}, {"locations", no_argument, &locations_flag, 1},
/* was 'a'; apparently unused -wjh */ /* was 'a'; apparently unused -wjh */
{"name-prefix", required_argument, 0, 'p'}, {"name-prefix", required_argument, 0, 'p'},
@@ -53,7 +56,6 @@ static struct option longopts[] =
{"no-parser", no_argument, 0, 'n'}, {"no-parser", no_argument, 0, 'n'},
{"raw", no_argument, 0, 'r'}, {"raw", no_argument, 0, 'r'},
{"token-table", no_argument, 0, 'k'}, {"token-table", no_argument, 0, 'k'},
{"debug", no_argument, 0, 'd'},
/* Output. */ /* Output. */
{"defines", no_argument, 0, 'd'}, {"defines", no_argument, 0, 'd'},
@@ -98,6 +100,7 @@ Operation modes:\n\
fputs (_("\ fputs (_("\
Parser:\n\ 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\ --locations enable locations computation\n\
-p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\ -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\
@@ -136,7 +139,7 @@ bison (GNU Bison) %s"), VERSION);
putc ('\n', stream); putc ('\n', stream);
fputs (_("\ fputs (_("\
Copyright 1984, 1986, 1989, 1992, 2000 Free Software Foundation, Inc.\n"), Copyright 1984, 1986, 1989, 1992, 2000, 2001 Free Software Foundation, Inc.\n"),
stream); stream);
fputs (_("\ fputs (_("\
@@ -156,73 +159,74 @@ getargs (int argc, char *argv[])
{ {
int c; int c;
while ((c = getopt_long (argc, argv, "yvdhrltknVo:b:p:", longopts, (int *)0)) while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
!= EOF) switch (c)
{ {
switch (c) case 0:
{ /* Certain long options cause getopt_long to return 0. */
case 0: break;
/* Certain long options cause getopt_long to return 0. */
break;
case 'y': case 'y':
yacc_flag = 1; yacc_flag = 1;
break; break;
case 'h': case 'h':
usage (stdout); usage (stdout);
exit (0); exit (0);
case 'V': case 'V':
version (stdout); version (stdout);
exit (0); exit (0);
case 'v': case 'v':
verbose_flag = 1; verbose_flag = 1;
break; break;
case 'd': case 'S':
defines_flag = 1; skeleton = optarg;
break; break;
case 'l': case 'd':
no_lines_flag = 1; defines_flag = 1;
break; break;
case 'k': case 'l':
token_table_flag = 1; no_lines_flag = 1;
break; break;
case 'r': case 'k':
raw_flag = 1; token_table_flag = 1;
break; break;
case 'n': case 'r':
no_parser_flag = 1; raw_flag = 1;
break; break;
case 't': case 'n':
debug_flag = 1; no_parser_flag = 1;
break; break;
case 'o': case 't':
spec_outfile = optarg; debug_flag = 1;
break; break;
case 'b': case 'o':
spec_file_prefix = optarg; spec_outfile = optarg;
break; break;
case 'p': case 'b':
spec_name_prefix = optarg; spec_file_prefix = optarg;
break; break;
default: case 'p':
fprintf (stderr, _("Try `%s --help' for more information.\n"), spec_name_prefix = optarg;
program_name); break;
exit (1);
} default:
} fprintf (stderr, _("Try `%s --help' for more information.\n"),
program_name);
exit (1);
}
if (optind == argc) if (optind == argc)
{ {

View File

@@ -1,5 +1,5 @@
/* Parse command line arguments for bison. /* Parse command line arguments for bison.
Copyright 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.
@@ -24,6 +24,7 @@
/* flags set by % directives */ /* flags set by % directives */
extern char *spec_file_prefix; /* for -b */ extern char *spec_file_prefix; /* for -b */
extern char *spec_name_prefix; /* for -p */ extern char *spec_name_prefix; /* for -p */
extern char *skeleton;
extern int debug_flag; /* for -t */ extern int debug_flag; /* for -t */
extern int defines_flag; /* for -d */ extern int defines_flag; /* for -d */

View File

@@ -1154,17 +1154,19 @@ output_parser (void)
int c; int c;
FILE *fskel; FILE *fskel;
size_t line; size_t line;
const char *skeleton = NULL;
int actions_dumped = 0; int actions_dumped = 0;
if (pure_parser) if (pure_parser)
obstack_sgrow (&table_obstack, "#define YYPURE 1\n\n"); obstack_sgrow (&table_obstack, "#define YYPURE 1\n\n");
/* Loop over lines in the standard parser file. */ /* Loop over lines in the standard parser file. */
if (semantic_parser) if (!skeleton)
skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY); {
else if (semantic_parser)
skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE); skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY);
else
skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
}
fskel = xfopen (skeleton, "r"); fskel = xfopen (skeleton, "r");
/* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a /* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a