- tabfile = stringappend (base_name, ".c");
-
- attrsfile = stringappend (short_base_name, EXT_STYPE_H);
- guardfile = stringappend (short_base_name, EXT_GUARD_C);
-
- /* Initialize the obstacks. */
- obstack_init (&action_obstack);
- obstack_init (&attrs_obstack);
- obstack_init (&table_obstack);
- obstack_init (&defines_obstack);
+ {
+ file_name_split (grammar_file, &base, &tab, &ext);
+
+ if (spec_file_prefix)
+ {
+ /* If --file-prefix=foo was specified, ALL_BUT_TAB_EXT =
+ `foo'. */
+ dir_prefix = xstrndup (grammar_file, base - grammar_file);
+ all_but_tab_ext = xstrdup (spec_file_prefix);
+ }
+ else if (yacc_flag)
+ {
+ /* If --yacc, then the output is `y.tab.c'. */
+ dir_prefix = "";
+ all_but_tab_ext = "y";
+ }
+ else
+ {
+ /* Otherwise, ALL_BUT_TAB_EXT is computed from the input
+ grammar: `foo/bar.yy' => `bar'. */
+ dir_prefix = "";
+ all_but_tab_ext =
+ xstrndup (base,
+ (strlen (base) - (ext ? strlen (ext) : 0)));
+ }
+
+ all_but_ext = concat2 (all_but_tab_ext, TAB_EXT);
+
+ /* Compute the extensions from the grammar file name. */
+ if (ext && !yacc_flag)
+ compute_exts_from_gf (ext);
+ }