struct obstack action_obstack;
struct obstack attrs_obstack;
-struct obstack table_obstack;
-struct obstack defines_obstack;
struct obstack guard_obstack;
struct obstack output_obstack;
char *spec_verbose_file = NULL; /* for --verbose. */
char *spec_graph_file = NULL; /* for -g. */
char *spec_defines_file = NULL; /* for --defines. */
+char *parser_file_name = NULL;
char *infile = NULL;
char *attrsfile = NULL;
| alphanumerical + underscore). |
`-----------------------------------------------------------------*/
-static char *
+char *
compute_header_macro (void)
{
const char *prefix = "BISON_";
return result;
}
-/*--------------------------------------------------.
-| Save the content of the obstack OBS in FILENAME. |
-`--------------------------------------------------*/
-
-static void
-obstack_save (struct obstack *obs, const char *filename)
-{
- FILE *out = xfopen (filename, "w");
- size_t size = obstack_object_size (obs);
- fwrite (obstack_finish (obs), 1, size, out);
- xfclose (out);
-}
-
-/*---------------------------------------------------------------------.
-| Output double inclusion protection macros and saves defines_obstack |
-`---------------------------------------------------------------------*/
-
-static void
-defines_obstack_save (const char *filename)
-{
- FILE *out = xfopen (filename, "w");
- size_t size = obstack_object_size (&defines_obstack);
- char *macro_name = compute_header_macro ();
-
- fprintf (out, "#ifndef %s\n", macro_name);
- fprintf (out, "# define %s\n\n", macro_name);
- fwrite (obstack_finish (&defines_obstack), 1, size, out);
- fprintf (out, "\n#endif /* not %s */\n", macro_name);
-
- free (macro_name);
- xfclose (out);
-}
/*------------------------------------------------------------------.
| Return the path to the skeleton which locaction might be given in |
{
compute_base_names ();
+ parser_file_name =
+ spec_outfile ? spec_outfile : stringappend (base_name, src_extension);
+
/* If not yet done. */
if (!src_extension)
src_extension = ".c";
#ifndef MSDOS
attrsfile = stringappend (attrsfile, header_extension);
#endif /* MSDOS */
-
-}
-
-/*-----------------------------------------------------------------.
-| Open the input file. Look for the skeletons. Find the names of |
-| the output files. Prepare the obstacks. |
-`-----------------------------------------------------------------*/
-
-void
-open_files (void)
-{
- finput = xfopen (infile, "r");
-
- /* Initialize the obstacks. */
- obstack_init (&action_obstack);
- obstack_init (&attrs_obstack);
- obstack_init (&table_obstack);
- obstack_init (&defines_obstack);
- obstack_init (&guard_obstack);
- obstack_init (&output_obstack);
-}
-
-
-
-/*-----------------------.
-| Close the open file.. |
-`-----------------------*/
-
-void
-close_files (void)
-{
- xfclose (finput);
-}
-
-/*---------------------------.
-| Produce the output files. |
-`---------------------------*/
-
-void
-output_files (void)
-{
- /* Output the main file. */
- if (spec_outfile)
- obstack_save (&table_obstack, spec_outfile);
- else
- obstack_save (&table_obstack, stringappend (base_name, src_extension));
- obstack_free (&table_obstack, NULL);
-
- /* Output the header file if wanted. */
- if (defines_flag)
- defines_obstack_save (spec_defines_file);
- obstack_free (&defines_obstack, NULL);
-
-#if 0
- /* Seems to be invalid now --akim. */
-
- /* If we output only the table, dump the actions in ACTFILE. */
- if (no_parser_flag)
- obstack_save (&action_obstack, stringappend (short_base_name, ".act"));
- obstack_free (&action_obstack, NULL);
-#endif
-
- /* If we produced a semantic parser ATTRS_OBSTACK must be dumped
- into its own file, ATTTRSFILE. */
- if (semantic_parser)
- {
- char *temp_name;
-
- obstack_save (&attrs_obstack, attrsfile);
- obstack_free (&attrs_obstack, NULL);
- temp_name = stringappend (short_base_name, EXT_GUARD_C);
-#ifndef MSDOS
- temp_name = stringappend (temp_name, src_extension);
-#endif /* MSDOS */
- obstack_save (&guard_obstack, temp_name);
- obstack_free (&guard_obstack, NULL);
- }
}