From cd5bd6ac4f0ee29eec5efd5c4659a29c37527c23 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 16 Mar 2001 15:16:08 +0000 Subject: [PATCH] * 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. --- ChangeLog | 8 +++ NEWS | 5 ++ doc/bison.info | 14 ++--- doc/bison.info-4 | 5 ++ doc/bison.texinfo | 5 ++ doc/stamp-vti | 2 +- po/cat-id-tbl.c | 4 +- src/getargs.c | 146 ++++++++++++++++++++++++---------------------- src/getargs.h | 3 +- src/output.c | 12 ++-- 10 files changed, 118 insertions(+), 86 deletions(-) diff --git a/ChangeLog b/ChangeLog index 533d05e5..aa7498c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-03-16 Akim Demaille + + * 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 * m4/strerror_r.m4: New. diff --git a/NEWS b/NEWS index 8fbadf4e..988894ec 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,11 @@ Changes in version 1.28a: * 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. `%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose', and `%debug'. diff --git a/doc/bison.info b/doc/bison.info index 763b5eb2..f9a4eb0c 100644 --- a/doc/bison.info +++ b/doc/bison.info @@ -34,7 +34,7 @@ bison.info-1: 1306 bison.info-2: 50276 bison.info-3: 98079 bison.info-4: 147596 -bison.info-5: 191991 +bison.info-5: 192129  Tag Table: (Indirect) @@ -124,11 +124,11 @@ Node: Tie-in Recovery172317 Node: Debugging174489 Node: Invocation177790 Node: Bison Options178520 -Node: Environment Variables181893 -Node: Option Cross Key182741 -Node: VMS Invocation183631 -Node: Table of Symbols184415 -Node: Glossary191991 -Node: Index198281 +Node: Environment Variables182031 +Node: Option Cross Key182879 +Node: VMS Invocation183769 +Node: Table of Symbols184553 +Node: Glossary192129 +Node: Index198419  End Tag Table diff --git a/doc/bison.info-4 b/doc/bison.info-4 index ae2509a4..60dea696 100644 --- a/doc/bison.info-4 +++ b/doc/bison.info-4 @@ -846,6 +846,11 @@ Operations modes: 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' `--debug' Output a definition of the macro `YYDEBUG' into the parser file, so diff --git a/doc/bison.texinfo b/doc/bison.texinfo index be291754..c3783fb0 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -4984,6 +4984,11 @@ bison -y $* Tuning the parser: @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 @itemx --debug Output a definition of the macro @code{YYDEBUG} into the parser file, so diff --git a/doc/stamp-vti b/doc/stamp-vti index 5fb7ec05..9f5acf10 100644 --- a/doc/stamp-vti +++ b/doc/stamp-vti @@ -1,3 +1,3 @@ -@set UPDATED 18 January 2001 +@set UPDATED 16 March 2001 @set EDITION 1.28a @set VERSION 1.28a diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c index 72696884..6627ce81 100644 --- a/po/cat-id-tbl.c +++ b/po/cat-id-tbl.c @@ -43,6 +43,7 @@ Operation modes:\n\ -y, --yacc emulate POSIX yacc\n", 26}, {"\ Parser:\n\ + -S, --skeleton=FILE specify the skeleton to use\n\ -t, --debug instrument the parser for debugging\n\ --locations enable locations computation\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}, {"Report bugs to .\n", 29}, {"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\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", 32}, diff --git a/src/getargs.c b/src/getargs.c index 9882af91..890179ec 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -1,5 +1,5 @@ /* 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. @@ -30,13 +30,14 @@ int locations_flag = 0; int no_lines_flag = 0; int no_parser_flag = 0; int raw_flag = 0; +char *skeleton = 0; int token_table_flag = 0; int verbose_flag = 0; int statistics_flag = 0; int yacc_flag = 0; /* for -y */ extern char *program_name; -const char *shortopts = "yvdhrltknVo:b:p:"; +const char *shortopts = "yvdhrltknVo:b:p:S:"; static struct option longopts[] = { /* Operation modes. */ @@ -46,6 +47,8 @@ static struct option longopts[] = {"fixed-output-files",no_argument, 0, 'y'}, /* Parser. */ + {"skeleton", required_argument, 0, 'S'}, + {"debug", no_argument, 0, 'd'}, {"locations", no_argument, &locations_flag, 1}, /* was 'a'; apparently unused -wjh */ {"name-prefix", required_argument, 0, 'p'}, @@ -53,7 +56,6 @@ static struct option longopts[] = {"no-parser", no_argument, 0, 'n'}, {"raw", no_argument, 0, 'r'}, {"token-table", no_argument, 0, 'k'}, - {"debug", no_argument, 0, 'd'}, /* Output. */ {"defines", no_argument, 0, 'd'}, @@ -98,6 +100,7 @@ Operation modes:\n\ fputs (_("\ Parser:\n\ + -S, --skeleton=FILE specify the skeleton to use\n\ -t, --debug instrument the parser for debugging\n\ --locations enable locations computation\n\ -p, --name-prefix=PREFIX prepend PREFIX to the external symbols\n\ @@ -136,7 +139,7 @@ bison (GNU Bison) %s"), VERSION); putc ('\n', stream); 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); fputs (_("\ @@ -156,73 +159,74 @@ getargs (int argc, char *argv[]) { int c; - while ((c = getopt_long (argc, argv, "yvdhrltknVo:b:p:", longopts, (int *)0)) - != EOF) - { - switch (c) - { - case 0: - /* Certain long options cause getopt_long to return 0. */ - break; - - case 'y': - yacc_flag = 1; - break; - - case 'h': - usage (stdout); - exit (0); - - case 'V': - version (stdout); - exit (0); - - case 'v': - verbose_flag = 1; - break; - - case 'd': - defines_flag = 1; - break; - - case 'l': - no_lines_flag = 1; - break; - - case 'k': - token_table_flag = 1; - break; - - case 'r': - raw_flag = 1; - break; - - case 'n': - no_parser_flag = 1; - break; - - case 't': - debug_flag = 1; - break; - - case 'o': - spec_outfile = optarg; - break; - - case 'b': - spec_file_prefix = optarg; - break; - - case 'p': - spec_name_prefix = optarg; - break; - - default: - fprintf (stderr, _("Try `%s --help' for more information.\n"), - program_name); - exit (1); - } - } + while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF) + switch (c) + { + case 0: + /* Certain long options cause getopt_long to return 0. */ + break; + + case 'y': + yacc_flag = 1; + break; + + case 'h': + usage (stdout); + exit (0); + + case 'V': + version (stdout); + exit (0); + + case 'v': + verbose_flag = 1; + break; + + case 'S': + skeleton = optarg; + break; + + case 'd': + defines_flag = 1; + break; + + case 'l': + no_lines_flag = 1; + break; + + case 'k': + token_table_flag = 1; + break; + + case 'r': + raw_flag = 1; + break; + + case 'n': + no_parser_flag = 1; + break; + + case 't': + debug_flag = 1; + break; + + case 'o': + spec_outfile = optarg; + break; + + case 'b': + spec_file_prefix = optarg; + break; + + case 'p': + spec_name_prefix = optarg; + break; + + default: + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + exit (1); + } if (optind == argc) { diff --git a/src/getargs.h b/src/getargs.h index d674b78a..e86d4335 100644 --- a/src/getargs.h +++ b/src/getargs.h @@ -1,5 +1,5 @@ /* 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. @@ -24,6 +24,7 @@ /* flags set by % directives */ extern char *spec_file_prefix; /* for -b */ extern char *spec_name_prefix; /* for -p */ +extern char *skeleton; extern int debug_flag; /* for -t */ extern int defines_flag; /* for -d */ diff --git a/src/output.c b/src/output.c index 914e0a7d..b86f4611 100644 --- a/src/output.c +++ b/src/output.c @@ -1154,17 +1154,19 @@ output_parser (void) int c; FILE *fskel; size_t line; - const char *skeleton = NULL; int actions_dumped = 0; if (pure_parser) obstack_sgrow (&table_obstack, "#define YYPURE 1\n\n"); /* Loop over lines in the standard parser file. */ - if (semantic_parser) - skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY); - else - skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE); + if (!skeleton) + { + if (semantic_parser) + skeleton = skeleton_find ("BISON_HAIRY", BISON_HAIRY); + else + skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE); + } fskel = xfopen (skeleton, "r"); /* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a -- 2.45.2