int c;
int count = 0;
struct obstack union_obstack;
+ const char *prologue = "\
+#ifndef YYSTYPE\n\
+typedef union";
+ const char *epilogue = "\
+ yystype;\n\
+# define YYSTYPE yystype\n\
+#endif\n";
if (typed)
complain (_("multiple %s declarations"), "%union");
/* FIXME: I'm worried: are you sure attrs_obstack is properly
filled? */
+ /* I don't see any reasons to keep this line, because we should
+ create a special skeleton for this option. */
if (no_lines_flag)
obstack_1grow (&attrs_obstack, '\n');
obstack_init (&union_obstack);
obstack_sgrow (&union_obstack, "union");
if (defines_flag)
- obstack_sgrow (&defines_obstack, "typedef union");
+ obstack_sgrow (&defines_obstack, prologue);
c = getc (finput);
if (count <= 0)
{
if (defines_flag)
- obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
+ obstack_sgrow (&defines_obstack, epilogue);
/* JF don't choke on trailing semi */
c = skip_white_space ();
if (c != ';')
error_token_number = errtoken->value;
+ if (startval->class == unknown_sym)
+ fatal (_("the start symbol %s is undefined"), startval->tag);
+ else if (startval->class == token_sym)
+ fatal (_("the start symbol %s is a token"), startval->tag);
+
+ start_symbol = startval->value;
+}
+
+
+/*-----------------------------------.
+| Output definition of token names. |
+`-----------------------------------*/
+
+static void
+symbols_output (void)
+{
{
struct obstack tokendefs;
obstack_init (&tokendefs);
output_token_defines (&table_obstack);
#endif
- if (startval->class == unknown_sym)
- fatal (_("the start symbol %s is undefined"), startval->tag);
- else if (startval->class == token_sym)
- fatal (_("the start symbol %s is a token"), startval->tag);
-
- start_symbol = startval->value;
-
if (defines_flag)
{
output_token_defines (&defines_obstack);
/* Assign the symbols their symbol numbers. Write #defines for the
token symbols into FDEFINES if requested. */
packsymbols ();
+ symbols_output ();
/* Convert the grammar into the format described in gram.h. */
packgram ();
}