* 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>
* src/output.c (output_actions): Clean up.

View File

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

View File

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

View File

@@ -1667,6 +1667,25 @@ readgram (void)
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 |
@@ -2016,6 +2035,8 @@ reader (void)
/* Read in the grammar, build grammar in list form. Write out
guards and actions. */
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,
write its type into the .tab.h file. */
#if 0