mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
* doc/bison.texinfo: Update.
* doc/bison.1 (mandoc): Update. * src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove .c and .h. * src/files.c: Support output files extensions computing. (src_extension): New static variable. (header_extension): New static variable. (tr): New function. (get_extension_index): New function, gets the index of an extension filename in a string. (compute_exts_from_gf): New function, computes extensions from the grammar file extension. (compute_exts_from_src): New functions, computes extensions from the C source file extension, file given by ``-o'' option. (compute_base_names): Update. (output_files): Update.
This commit is contained in:
18
ChangeLog
18
ChangeLog
@@ -1,3 +1,21 @@
|
|||||||
|
2001-08-01 Marc Autret <autret_m@epita.fr>
|
||||||
|
|
||||||
|
* doc/bison.texinfo: Update.
|
||||||
|
* doc/bison.1 (mandoc): Update.
|
||||||
|
* src/system.h (EXT_GUARD_C, EXT_STYPE_H): Remove .c and .h.
|
||||||
|
* src/files.c: Support output files extensions computing.
|
||||||
|
(src_extension): New static variable.
|
||||||
|
(header_extension): New static variable.
|
||||||
|
(tr): New function.
|
||||||
|
(get_extension_index): New function, gets the index of an extension
|
||||||
|
filename in a string.
|
||||||
|
(compute_exts_from_gf): New function, computes extensions from the
|
||||||
|
grammar file extension.
|
||||||
|
(compute_exts_from_src): New functions, computes extensions from the
|
||||||
|
C source file extension, file given by ``-o'' option.
|
||||||
|
(compute_base_names): Update.
|
||||||
|
(output_files): Update.
|
||||||
|
|
||||||
2001-08-01 Robert Anisko <anisko_r@epita.fr>
|
2001-08-01 Robert Anisko <anisko_r@epita.fr>
|
||||||
|
|
||||||
* doc/autoconf.texi: Document @$.
|
* doc/autoconf.texi: Document @$.
|
||||||
|
|||||||
2
NEWS
2
NEWS
@@ -3,6 +3,8 @@ Bison News
|
|||||||
|
|
||||||
Changes in version 1.28a:
|
Changes in version 1.28a:
|
||||||
|
|
||||||
|
* the input and the output files has automatically a similar extension.
|
||||||
|
|
||||||
* Russian translation added.
|
* Russian translation added.
|
||||||
|
|
||||||
* NLS support updated; should hopefully be less troublesome.
|
* NLS support updated; should hopefully be less troublesome.
|
||||||
|
|||||||
15
doc/bison.1
15
doc/bison.1
@@ -71,13 +71,22 @@ Unlike
|
|||||||
.IR yacc ,
|
.IR yacc ,
|
||||||
the generated files do not have fixed names, but instead use the prefix
|
the generated files do not have fixed names, but instead use the prefix
|
||||||
of the input file.
|
of the input file.
|
||||||
|
Moreover, if you need to put
|
||||||
|
.IR C++
|
||||||
|
code in the input file, you can end his name by a C++-like extension
|
||||||
|
(.ypp or .y++), then bison will follow your extension to name the
|
||||||
|
output file (.cpp or .c++).
|
||||||
For instance, a grammar description file named
|
For instance, a grammar description file named
|
||||||
.B parse.y
|
.B parse.yxx
|
||||||
would produce the generated parser in a file named
|
would produce the generated parser in a file named
|
||||||
.BR parse.tab.c ,
|
.BR parse.tab.cxx ,
|
||||||
instead of
|
instead of
|
||||||
.IR yacc 's
|
.IR yacc 's
|
||||||
.BR y.tab.c .
|
.BR y.tab.c
|
||||||
|
or old
|
||||||
|
.IR Bison
|
||||||
|
versions
|
||||||
|
.BR parse.tab.c .
|
||||||
.PP
|
.PP
|
||||||
This description of the options that can be given to
|
This description of the options that can be given to
|
||||||
.I bison
|
.I bison
|
||||||
|
|||||||
134
doc/bison.info
134
doc/bison.info
@@ -32,9 +32,9 @@ instead of in the original English.
|
|||||||
Indirect:
|
Indirect:
|
||||||
bison.info-1: 1307
|
bison.info-1: 1307
|
||||||
bison.info-2: 50189
|
bison.info-2: 50189
|
||||||
bison.info-3: 99779
|
bison.info-3: 99814
|
||||||
bison.info-4: 149657
|
bison.info-4: 149692
|
||||||
bison.info-5: 196400
|
bison.info-5: 196961
|
||||||
|
|
||||||
Tag Table:
|
Tag Table:
|
||||||
(Indirect)
|
(Indirect)
|
||||||
@@ -71,69 +71,69 @@ Node: Mfcalc Rules72281
|
|||||||
Node: Mfcalc Symtab73661
|
Node: Mfcalc Symtab73661
|
||||||
Node: Exercises80034
|
Node: Exercises80034
|
||||||
Node: Grammar File80540
|
Node: Grammar File80540
|
||||||
Node: Grammar Outline81353
|
Node: Grammar Outline81388
|
||||||
Node: C Declarations82087
|
Node: C Declarations82122
|
||||||
Node: Bison Declarations82667
|
Node: Bison Declarations82702
|
||||||
Node: Grammar Rules83079
|
Node: Grammar Rules83114
|
||||||
Node: C Code83539
|
Node: C Code83574
|
||||||
Node: Symbols84469
|
Node: Symbols84504
|
||||||
Node: Rules89550
|
Node: Rules89585
|
||||||
Node: Recursion91189
|
Node: Recursion91224
|
||||||
Node: Semantics92908
|
Node: Semantics92943
|
||||||
Node: Value Type94002
|
Node: Value Type94037
|
||||||
Node: Multiple Types94674
|
Node: Multiple Types94709
|
||||||
Node: Actions95691
|
Node: Actions95726
|
||||||
Node: Action Types98476
|
Node: Action Types98511
|
||||||
Node: Mid-Rule Actions99779
|
Node: Mid-Rule Actions99814
|
||||||
Node: Locations105348
|
Node: Locations105383
|
||||||
Node: Location Type106013
|
Node: Location Type106048
|
||||||
Node: Actions and Locations106571
|
Node: Actions and Locations106606
|
||||||
Node: Location Default Action107735
|
Node: Location Default Action107770
|
||||||
Node: Declarations108942
|
Node: Declarations108977
|
||||||
Node: Token Decl110261
|
Node: Token Decl110296
|
||||||
Node: Precedence Decl112274
|
Node: Precedence Decl112309
|
||||||
Node: Union Decl113825
|
Node: Union Decl113860
|
||||||
Node: Type Decl114669
|
Node: Type Decl114704
|
||||||
Node: Expect Decl115575
|
Node: Expect Decl115610
|
||||||
Node: Start Decl117121
|
Node: Start Decl117156
|
||||||
Node: Pure Decl117499
|
Node: Pure Decl117534
|
||||||
Node: Decl Summary119176
|
Node: Decl Summary119211
|
||||||
Node: Multiple Parsers124559
|
Node: Multiple Parsers124594
|
||||||
Node: Interface126053
|
Node: Interface126088
|
||||||
Node: Parser Function126925
|
Node: Parser Function126960
|
||||||
Node: Lexical127760
|
Node: Lexical127795
|
||||||
Node: Calling Convention129166
|
Node: Calling Convention129201
|
||||||
Node: Token Values131937
|
Node: Token Values131972
|
||||||
Node: Token Positions133086
|
Node: Token Positions133121
|
||||||
Node: Pure Calling133971
|
Node: Pure Calling134006
|
||||||
Node: Error Reporting136903
|
Node: Error Reporting136938
|
||||||
Node: Action Features139025
|
Node: Action Features139060
|
||||||
Node: Algorithm142320
|
Node: Algorithm142355
|
||||||
Node: Look-Ahead144613
|
Node: Look-Ahead144648
|
||||||
Node: Shift/Reduce146745
|
Node: Shift/Reduce146780
|
||||||
Node: Precedence149657
|
Node: Precedence149692
|
||||||
Node: Why Precedence150308
|
Node: Why Precedence150343
|
||||||
Node: Using Precedence152173
|
Node: Using Precedence152208
|
||||||
Node: Precedence Examples153141
|
Node: Precedence Examples153176
|
||||||
Node: How Precedence153842
|
Node: How Precedence153877
|
||||||
Node: Contextual Precedence154991
|
Node: Contextual Precedence155026
|
||||||
Node: Parser States156782
|
Node: Parser States156817
|
||||||
Node: Reduce/Reduce158025
|
Node: Reduce/Reduce158060
|
||||||
Node: Mystery Conflicts161586
|
Node: Mystery Conflicts161621
|
||||||
Node: Stack Overflow164972
|
Node: Stack Overflow165007
|
||||||
Node: Error Recovery166345
|
Node: Error Recovery166380
|
||||||
Node: Context Dependency171481
|
Node: Context Dependency171516
|
||||||
Node: Semantic Tokens172329
|
Node: Semantic Tokens172364
|
||||||
Node: Lexical Tie-ins175346
|
Node: Lexical Tie-ins175381
|
||||||
Node: Tie-in Recovery176894
|
Node: Tie-in Recovery176929
|
||||||
Node: Debugging179066
|
Node: Debugging179101
|
||||||
Node: Invocation182367
|
Node: Invocation182402
|
||||||
Node: Bison Options183097
|
Node: Bison Options183658
|
||||||
Node: Environment Variables186531
|
Node: Environment Variables187092
|
||||||
Node: Option Cross Key187379
|
Node: Option Cross Key187940
|
||||||
Node: VMS Invocation188223
|
Node: VMS Invocation188784
|
||||||
Node: Table of Symbols189007
|
Node: Table of Symbols189568
|
||||||
Node: Glossary196400
|
Node: Glossary196961
|
||||||
Node: Index202690
|
Node: Index203251
|
||||||
|
|
||||||
End Tag Table
|
End Tag Table
|
||||||
|
|||||||
@@ -903,7 +903,7 @@ produces a C-language function that recognizes correct instances of the
|
|||||||
grammar.
|
grammar.
|
||||||
|
|
||||||
The Bison grammar input file conventionally has a name ending in
|
The Bison grammar input file conventionally has a name ending in
|
||||||
`.y'.
|
`.y'. *Note Invoking Bison: Invocation.
|
||||||
|
|
||||||
* Menu:
|
* Menu:
|
||||||
|
|
||||||
|
|||||||
@@ -857,7 +857,20 @@ Invoking Bison
|
|||||||
Here INFILE is the grammar file name, which usually ends in `.y'.
|
Here INFILE is the grammar file name, which usually ends in `.y'.
|
||||||
The parser file's name is made by replacing the `.y' with `.tab.c'.
|
The parser file's name is made by replacing the `.y' with `.tab.c'.
|
||||||
Thus, the `bison foo.y' filename yields `foo.tab.c', and the `bison
|
Thus, the `bison foo.y' filename yields `foo.tab.c', and the `bison
|
||||||
hack/foo.y' filename yields `hack/foo.tab.c'.
|
hack/foo.y' filename yields `hack/foo.tab.c'. It's is also possible, in
|
||||||
|
case you are writting C++ code instead of C in your grammar file, to
|
||||||
|
name it `foo.ypp' or `foo.y++'. Then, the output files will take an
|
||||||
|
extention like the given one as input (repectively `foo.tab.cpp' and
|
||||||
|
`foo.tab.c++'). This feature takes effect with all options that
|
||||||
|
manipulate filenames like `-o' or `-d'.
|
||||||
|
|
||||||
|
For example :
|
||||||
|
|
||||||
|
bison -d INFILE.YXX
|
||||||
|
will produce `infile.tab.cxx' and `infile.tab.hxx'. and
|
||||||
|
|
||||||
|
bison -d INFILE.Y -o OUTPUT.C++
|
||||||
|
will produce `output.c++' and `outfile.h++'.
|
||||||
|
|
||||||
* Menu:
|
* Menu:
|
||||||
|
|
||||||
|
|||||||
@@ -2142,6 +2142,7 @@ Bison takes as input a context-free grammar specification and produces a
|
|||||||
C-language function that recognizes correct instances of the grammar.
|
C-language function that recognizes correct instances of the grammar.
|
||||||
|
|
||||||
The Bison grammar input file conventionally has a name ending in @samp{.y}.
|
The Bison grammar input file conventionally has a name ending in @samp{.y}.
|
||||||
|
@xref{Invocation, ,Invoking Bison}.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Grammar Outline:: Overall layout of the grammar file.
|
* Grammar Outline:: Overall layout of the grammar file.
|
||||||
@@ -5079,7 +5080,26 @@ Here @var{infile} is the grammar file name, which usually ends in
|
|||||||
@samp{.y}. The parser file's name is made by replacing the @samp{.y}
|
@samp{.y}. The parser file's name is made by replacing the @samp{.y}
|
||||||
with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields
|
with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields
|
||||||
@file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
|
@file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
|
||||||
@file{hack/foo.tab.c}.@refill
|
@file{hack/foo.tab.c}. It's is also possible, in case you are writting
|
||||||
|
C++ code instead of C in your grammar file, to name it @file{foo.ypp}
|
||||||
|
or @file{foo.y++}. Then, the output files will take an extention like
|
||||||
|
the given one as input (repectively @file{foo.tab.cpp} and @file{foo.tab.c++}).
|
||||||
|
This feature takes effect with all options that manipulate filenames like
|
||||||
|
@samp{-o} or @samp{-d}.
|
||||||
|
|
||||||
|
For example :
|
||||||
|
|
||||||
|
@example
|
||||||
|
bison -d @var{infile.yxx}
|
||||||
|
@end example
|
||||||
|
will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}. and
|
||||||
|
|
||||||
|
@example
|
||||||
|
bison -d @var{infile.y} -o @var{output.c++}
|
||||||
|
@end example
|
||||||
|
will produce @file{output.c++} and @file{outfile.h++}.
|
||||||
|
|
||||||
|
@refill
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Bison Options:: All the options described in detail,
|
* Bison Options:: All the options described in detail,
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
@set UPDATED 30 July 2001
|
@set UPDATED 1 August 2001
|
||||||
@set EDITION 1.28a
|
@set EDITION 1.28a
|
||||||
@set VERSION 1.28a
|
@set VERSION 1.28a
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
@set UPDATED 30 July 2001
|
@set UPDATED 1 August 2001
|
||||||
@set EDITION 1.28a
|
@set EDITION 1.28a
|
||||||
@set VERSION 1.28a
|
@set VERSION 1.28a
|
||||||
|
|||||||
121
src/files.c
121
src/files.c
@@ -45,6 +45,11 @@ char *attrsfile;
|
|||||||
static char *base_name;
|
static char *base_name;
|
||||||
static char *short_base_name;
|
static char *short_base_name;
|
||||||
|
|
||||||
|
/* C source file extension (the parser source). */
|
||||||
|
static char *src_extension;
|
||||||
|
/* Header file extension (if option ``-d'' is specified). */
|
||||||
|
static char *header_extension;
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------.
|
/*--------------------------.
|
||||||
| Is SUFFIX ending STRING? |
|
| Is SUFFIX ending STRING? |
|
||||||
@@ -156,9 +161,68 @@ skeleton_find (const char *envvar, const char *skeleton)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------.
|
/*----------------------------------------------------------------.
|
||||||
| Compute BASE_NAME and SHORT_BASE_NAME. |
|
| Compute BASE_NAME, SHORT_BASE_NAME and output files extensions. |
|
||||||
`----------------------------------------*/
|
`----------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Replace all characters FROM by TO in the string IN.
|
||||||
|
and returns a new allocated string. */
|
||||||
|
static char *
|
||||||
|
tr(const char *in, char from, char to)
|
||||||
|
{
|
||||||
|
char *temp;
|
||||||
|
char *out;
|
||||||
|
|
||||||
|
out = XMALLOC (char, strlen (in) + 1);
|
||||||
|
|
||||||
|
for (temp = out; *in; in++, out++)
|
||||||
|
if (*in == from)
|
||||||
|
*out = to;
|
||||||
|
else
|
||||||
|
*out = *in;
|
||||||
|
*out = 0;
|
||||||
|
return (temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Gets the extension index in FILENAME. Returns 0 if fails to
|
||||||
|
find an extension. */
|
||||||
|
static int
|
||||||
|
get_extension_index(const char *filename)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len = strlen (filename);
|
||||||
|
|
||||||
|
if (filename[len-- - 1] == '.')
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
while ((len > 0) && (filename[len - 1] != '.'))
|
||||||
|
if (filename[len - 1] == '/')
|
||||||
|
return (0);
|
||||||
|
else
|
||||||
|
len--;
|
||||||
|
|
||||||
|
return (len - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Computes extensions from the grammar file extension. */
|
||||||
|
static void
|
||||||
|
compute_exts_from_gf(const char *ext)
|
||||||
|
{
|
||||||
|
src_extension = tr(ext, 'y', 'c');
|
||||||
|
src_extension = tr(src_extension, 'Y', 'C');
|
||||||
|
header_extension = tr(ext, 'y', 'h');
|
||||||
|
header_extension = tr(header_extension, 'Y', 'H');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Computes extensions from the given c source file extension. */
|
||||||
|
static void
|
||||||
|
compute_exts_from_src(const char *ext)
|
||||||
|
{
|
||||||
|
src_extension = xstrdup(ext);
|
||||||
|
header_extension = tr(ext, 'c', 'h');
|
||||||
|
header_extension = tr(header_extension, 'C', 'H');
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: Should use xstrndup. */
|
/* FIXME: Should use xstrndup. */
|
||||||
|
|
||||||
@@ -167,6 +231,11 @@ compute_base_names (void)
|
|||||||
{
|
{
|
||||||
size_t base_length;
|
size_t base_length;
|
||||||
size_t short_base_length;
|
size_t short_base_length;
|
||||||
|
size_t ext_index;
|
||||||
|
|
||||||
|
/* Set default extensions */
|
||||||
|
src_extension = ".c";
|
||||||
|
header_extension = ".h";
|
||||||
|
|
||||||
/* If --output=foo.c was specified (SPEC_OUTFILE == foo.c),
|
/* If --output=foo.c was specified (SPEC_OUTFILE == foo.c),
|
||||||
BASE_NAME and SHORT_BASE_NAME are `foo'.
|
BASE_NAME and SHORT_BASE_NAME are `foo'.
|
||||||
@@ -183,8 +252,18 @@ compute_base_names (void)
|
|||||||
#endif /* MSDOS */
|
#endif /* MSDOS */
|
||||||
/* BASE_LENGTH includes ".tab" but not ".c". */
|
/* BASE_LENGTH includes ".tab" but not ".c". */
|
||||||
base_length = strlen (spec_outfile);
|
base_length = strlen (spec_outfile);
|
||||||
if (strsuffix (spec_outfile, ".c"))
|
|
||||||
base_length -= 2;
|
ext_index = get_extension_index (spec_outfile);
|
||||||
|
/* if the initial segment of extension contains 'c' or a 'C', I assume
|
||||||
|
that it is a C or C++ source file */
|
||||||
|
if (ext_index)
|
||||||
|
ext_index = (strspn(spec_outfile + ext_index + 1, "cC")) ? ext_index : 0;
|
||||||
|
if (ext_index)
|
||||||
|
{
|
||||||
|
base_length -= strlen (spec_outfile + ext_index);
|
||||||
|
compute_exts_from_src(spec_outfile + ext_index);
|
||||||
|
}
|
||||||
|
|
||||||
base_name = strndup (spec_outfile, base_length);
|
base_name = strndup (spec_outfile, base_length);
|
||||||
/* SHORT_BASE_LENGTH includes neither ".tab" nor ".c". */
|
/* SHORT_BASE_LENGTH includes neither ".tab" nor ".c". */
|
||||||
short_base_length = base_length;
|
short_base_length = base_length;
|
||||||
@@ -205,7 +284,6 @@ compute_base_names (void)
|
|||||||
strlwr (spec_file_prefix);
|
strlwr (spec_file_prefix);
|
||||||
#endif /* MSDOS */
|
#endif /* MSDOS */
|
||||||
short_base_name = xstrdup (spec_file_prefix);
|
short_base_name = xstrdup (spec_file_prefix);
|
||||||
|
|
||||||
base_name = XMALLOC (char,
|
base_name = XMALLOC (char,
|
||||||
strlen (short_base_name) + strlen (EXT_TAB) + 1);
|
strlen (short_base_name) + strlen (EXT_TAB) + 1);
|
||||||
stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
|
stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
|
||||||
@@ -224,8 +302,18 @@ compute_base_names (void)
|
|||||||
/* BASE_LENGTH gets length of BASE_NAME, sans ".y" suffix if any. */
|
/* BASE_LENGTH gets length of BASE_NAME, sans ".y" suffix if any. */
|
||||||
|
|
||||||
base_length = strlen (name_base);
|
base_length = strlen (name_base);
|
||||||
if (strsuffix (name_base, ".y"))
|
|
||||||
base_length -= 2;
|
ext_index = get_extension_index (name_base);
|
||||||
|
/* if the initial segment of extension contains a 'y' or a 'Y', I assume
|
||||||
|
that it is a yacc or bison grammar file */
|
||||||
|
if (ext_index)
|
||||||
|
ext_index = (strspn(name_base + ext_index + 1, "yY")) ? ext_index : 0;
|
||||||
|
if (ext_index)
|
||||||
|
{
|
||||||
|
base_length -= strlen (name_base + ext_index);
|
||||||
|
compute_exts_from_gf(name_base + ext_index);
|
||||||
|
}
|
||||||
|
|
||||||
short_base_length = base_length;
|
short_base_length = base_length;
|
||||||
short_base_name = strndup (name_base, short_base_length);
|
short_base_name = strndup (name_base, short_base_length);
|
||||||
|
|
||||||
@@ -268,17 +356,21 @@ output_files (void)
|
|||||||
xfclose (finput);
|
xfclose (finput);
|
||||||
|
|
||||||
compute_base_names ();
|
compute_base_names ();
|
||||||
|
|
||||||
attrsfile = stringappend (short_base_name, EXT_STYPE_H);
|
attrsfile = stringappend (short_base_name, EXT_STYPE_H);
|
||||||
|
#ifndef MSDOS
|
||||||
|
stringappend (attrsfile, header_extension);
|
||||||
|
#endif /* MSDOS */
|
||||||
|
|
||||||
/* Output the main file. */
|
/* Output the main file. */
|
||||||
if (spec_outfile)
|
if (spec_outfile)
|
||||||
obstack_save (&table_obstack, spec_outfile);
|
obstack_save (&table_obstack, spec_outfile);
|
||||||
else
|
else
|
||||||
obstack_save (&table_obstack, stringappend (base_name, ".c"));
|
obstack_save (&table_obstack, stringappend (base_name, src_extension));
|
||||||
|
|
||||||
/* Output the header file if wanted. */
|
/* Output the header file if wanted. */
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_save (&defines_obstack, stringappend (base_name, ".h"));
|
obstack_save (&defines_obstack, stringappend (base_name, header_extension));
|
||||||
|
|
||||||
/* If we output only the table, dump the actions in ACTFILE. */
|
/* If we output only the table, dump the actions in ACTFILE. */
|
||||||
if (no_parser_flag)
|
if (no_parser_flag)
|
||||||
@@ -288,9 +380,14 @@ output_files (void)
|
|||||||
into its own file, ATTTRSFILE. */
|
into its own file, ATTTRSFILE. */
|
||||||
if (semantic_parser)
|
if (semantic_parser)
|
||||||
{
|
{
|
||||||
|
char *temp_name;
|
||||||
|
|
||||||
obstack_save (&attrs_obstack, attrsfile);
|
obstack_save (&attrs_obstack, attrsfile);
|
||||||
obstack_save (&guard_obstack,
|
temp_name = stringappend (short_base_name, EXT_GUARD_C);
|
||||||
stringappend (short_base_name, EXT_GUARD_C));
|
#ifndef MSDOS
|
||||||
|
temp_name = stringappend (temp_name, src_extension);
|
||||||
|
#endif /* MSDOS */
|
||||||
|
obstack_save (&guard_obstack, temp_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose_flag)
|
if (verbose_flag)
|
||||||
|
|||||||
@@ -209,8 +209,8 @@ do { \
|
|||||||
/* VMS. */
|
/* VMS. */
|
||||||
# define EXT_TAB "_tab"
|
# define EXT_TAB "_tab"
|
||||||
# define EXT_OUTPUT ".output"
|
# define EXT_OUTPUT ".output"
|
||||||
# define EXT_STYPE_H "_stype.h"
|
# define EXT_STYPE_H "_stype"
|
||||||
# define EXT_GUARD_C "_guard.c"
|
# define EXT_GUARD_C "_guard"
|
||||||
#else /* ! VMS */
|
#else /* ! VMS */
|
||||||
# ifdef MSDOS
|
# ifdef MSDOS
|
||||||
/* MS DOS. */
|
/* MS DOS. */
|
||||||
@@ -222,8 +222,8 @@ do { \
|
|||||||
/* Standard. */
|
/* Standard. */
|
||||||
# define EXT_TAB ".tab"
|
# define EXT_TAB ".tab"
|
||||||
# define EXT_OUTPUT ".output"
|
# define EXT_OUTPUT ".output"
|
||||||
# define EXT_STYPE_H ".stype.h"
|
# define EXT_STYPE_H ".stype"
|
||||||
# define EXT_GUARD_C ".guard.c"
|
# define EXT_GUARD_C ".guard"
|
||||||
# endif /* ! MSDOS */
|
# endif /* ! MSDOS */
|
||||||
#endif /* ! VMS */
|
#endif /* ! VMS */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user