* src/bison.simple: Add %%user_code directive at the end.

* src/reader.c (read_additionnal_code): New.
(reader): Use it.
* src/output.c (output_program): Remove.
(output): Update.
This commit is contained in:
Marc Autret
2001-08-29 14:17:00 +00:00
parent 4e5caae2c6
commit ff48177d25
4 changed files with 32 additions and 11 deletions

View File

@@ -1,3 +1,11 @@
2001-08-29 Marc Autret <autret_m@epita.fr>
* src/bison.simple: Add %%user_code directive at the end.
* src/reader.c (read_additionnal_code): New.
(reader): Use it.
* src/output.c (output_program): Remove.
(output): Update.
2001-08-28 Marc Autret <autret_m@epita.fr> 2001-08-28 Marc Autret <autret_m@epita.fr>
* src/output.c (output_actions): Clean up. * src/output.c (output_actions): Clean up.

View File

@@ -976,3 +976,6 @@ yyabortlab:
} }
return 1; return 1;
} }
%%user_code

View File

@@ -1017,16 +1017,6 @@ output_parser (void)
xfclose (fskel); xfclose (fskel);
} }
static void
output_program (void)
{
int c;
while ((c = getc (finput)) != EOF)
obstack_1grow (&table_obstack, c);
}
static void static void
free_itemsets (void) free_itemsets (void)
{ {
@@ -1122,7 +1112,6 @@ output (void)
/* Copy definitions in directive. */ /* Copy definitions in directive. */
macro_insert ("definitions", obstack_finish (&attrs_obstack)); macro_insert ("definitions", obstack_finish (&attrs_obstack));
output_parser (); output_parser ();
output_program ();
obstack_free (&macro_obstack, 0); obstack_free (&macro_obstack, 0);
obstack_free (&output_obstack, 0); obstack_free (&output_obstack, 0);

View File

@@ -1667,6 +1667,25 @@ readgram (void)
ntokens = nsyms - nvars; ntokens = nsyms - nvars;
} }
/* At the end of the grammar file, some C source code must
be stored. It is going to be associated to the user_code
directive. */
static void
read_additionnal_code (void)
{
char c;
struct obstack uc_obstack;
obstack_init (&uc_obstack);
while ((c = getc (finput)) != EOF)
obstack_1grow (&uc_obstack, c);
obstack_1grow (&uc_obstack, 0);
macro_insert ("user_code", obstack_finish (&uc_obstack));
}
/*--------------------------------------------------------------. /*--------------------------------------------------------------.
| For named tokens, but not literal ones, define the name. The | | For named tokens, but not literal ones, define the name. The |
@@ -2016,6 +2035,8 @@ reader (void)
/* Read in the grammar, build grammar in list form. Write out /* Read in the grammar, build grammar in list form. Write out
guards and actions. */ guards and actions. */
readgram (); readgram ();
/* Some C code is given at the end of the grammar file. */
read_additionnal_code ();
/* Now we know whether we need the line-number stack. If we do, /* Now we know whether we need the line-number stack. If we do,
write its type into the .tab.h file. */ write its type into the .tab.h file. */
#if 0 #if 0