* src/output.c (prepare_actions): Free tally' and width'.

(prepare_actions): Allocate and free `order'.
* src/symtab.c (symbols_free): Free `symbols'.
* src/scan-gram.l (scanner_free): Clear Flex's scanners memory.
* src/output.c (m4_invoke): Move to...
* src/scan-skel.l: here.
(<<EOF>>): Close yyout, and free its name.
This commit is contained in:
Akim Demaille
2002-07-03 06:52:02 +00:00
parent 8b752b00fd
commit 536545f3a4
6 changed files with 204 additions and 180 deletions

View File

@@ -1,3 +1,14 @@
2002-07-03 Akim Demaille <akim@epita.fr>
* src/output.c (prepare_actions): Free `tally' and `width'.
(prepare_actions): Allocate and free `order'.
* src/symtab.c (symbols_free): Free `symbols'.
* src/scan-gram.l (scanner_free): Clear Flex's scanners memory.
* src/output.c (m4_invoke): Move to...
* src/scan-skel.l: here.
(<<EOF>>): Close yyout, and free its name.
2002-07-03 Akim Demaille <akim@epita.fr> 2002-07-03 Akim Demaille <akim@epita.fr>
Fix some memory leaks, and fix a bug: state 0 was examined twice. Fix some memory leaks, and fix a bug: state 0 was examined twice.

View File

@@ -104,12 +104,8 @@
#include "conflicts.h" #include "conflicts.h"
#include "muscle_tab.h" #include "muscle_tab.h"
/* From lib/readpipe.h. */
FILE *readpipe PARAMS ((const char *, ...));
/* From src/scan-skel.l. */ /* From src/scan-skel.l. */
int skel_lex PARAMS ((void)); void m4_invoke PARAMS ((const char *definitions));
extern FILE *skel_in;
static int nvectors; static int nvectors;
static int nentries; static int nentries;
@@ -894,7 +890,6 @@ sort_actions (void)
{ {
int i; int i;
order = XCALLOC (short, nvectors);
nentries = 0; nentries = 0;
for (i = 0; i < nvectors; i++) for (i = 0; i < nvectors; i++)
@@ -1056,10 +1051,10 @@ pack_table (void)
XFREE (conflict_tos[i]); XFREE (conflict_tos[i]);
} }
XFREE (froms); free (froms);
XFREE (tos); free (tos);
XFREE (conflict_tos); free (conflict_tos);
XFREE (pos); free (pos);
} }
/* the following functions output yytable, yycheck, yyconflp, yyconfl, /* the following functions output yytable, yycheck, yyconflp, yyconfl,
@@ -1124,7 +1119,7 @@ output_check (void)
`-----------------------------------------------------------------*/ `-----------------------------------------------------------------*/
static void static void
output_actions (void) prepare_actions (void)
{ {
/* That's a poor way to make sure the sizes are properly corelated, /* That's a poor way to make sure the sizes are properly corelated,
in particular the signedness is not taking into account, but it's in particular the signedness is not taking into account, but it's
@@ -1149,8 +1144,13 @@ output_actions (void)
XFREE (from_state); XFREE (from_state);
XFREE (to_state); XFREE (to_state);
order = XCALLOC (short, nvectors);
sort_actions (); sort_actions ();
pack_table (); pack_table ();
free (order);
free (tally);
free (width);
output_base (); output_base ();
output_table (); output_table ();
@@ -1160,46 +1160,6 @@ output_actions (void)
} }
/*----------------------.
| Run our backend, M4. |
`----------------------*/
static void
m4_invoke (const char *definitions)
{
/* Invoke m4 on the definition of the muscles, and the skeleton. */
const char *bison_pkgdatadir = getenv ("BISON_PKGDATADIR");
const char *m4 = getenv ("M4");
int pkg_data_len;
char *full_skeleton;
if (!m4)
m4 = M4;
if (!bison_pkgdatadir)
bison_pkgdatadir = PKGDATADIR;
pkg_data_len = strlen (bison_pkgdatadir);
full_skeleton = XMALLOC (char, pkg_data_len + strlen (skeleton) + 2);
if (bison_pkgdatadir[pkg_data_len-1] == '/')
sprintf (full_skeleton, "%s%s", bison_pkgdatadir, skeleton);
else
sprintf (full_skeleton, "%s/%s", bison_pkgdatadir, skeleton);
if (trace_flag)
fprintf (stderr,
"running: %s -I %s m4sugar/m4sugar.m4 %s %s\n",
m4, bison_pkgdatadir, definitions, full_skeleton);
skel_in = readpipe (m4,
"-I", bison_pkgdatadir,
"m4sugar/m4sugar.m4",
definitions,
full_skeleton,
NULL);
XFREE (full_skeleton);
if (!skel_in)
error (EXIT_FAILURE, errno, "cannot run m4");
skel_lex ();
}
/*---------------------------. /*---------------------------.
| Call the skeleton parser. | | Call the skeleton parser. |
`---------------------------*/ `---------------------------*/
@@ -1312,7 +1272,7 @@ output (void)
prepare_tokens (); prepare_tokens ();
prepare_rules (); prepare_rules ();
prepare_states (); prepare_states ();
output_actions (); prepare_actions ();
prepare (); prepare ();

View File

@@ -705,16 +705,16 @@ int yy_flex_debug = 1;
static yyconst short int yy_rule_linenum[101] = static yyconst short int yy_rule_linenum[101] =
{ 0, { 0,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
152, 153, 155, 156, 157, 158, 160, 161, 162, 167, 151, 152, 154, 155, 156, 157, 159, 160, 161, 166,
170, 173, 176, 177, 180, 183, 186, 194, 200, 216, 169, 172, 175, 176, 179, 182, 185, 193, 199, 215,
217, 228, 240, 241, 242, 259, 268, 270, 290, 305, 216, 227, 239, 240, 241, 258, 267, 269, 289, 304,
307, 327, 339, 343, 344, 345, 346, 347, 348, 349, 306, 326, 338, 342, 343, 344, 345, 346, 347, 348,
350, 351, 357, 368, 374, 375, 377, 379, 397, 403, 349, 350, 356, 367, 373, 374, 376, 378, 396, 402,
404, 406, 408, 426, 429, 432, 433, 436, 447, 458, 403, 405, 407, 425, 428, 431, 432, 435, 446, 457,
460, 462, 465, 466, 469, 489, 496, 497, 498, 518 459, 461, 464, 465, 468, 488, 495, 496, 497, 517
} ; } ;
@@ -771,7 +771,6 @@ do { \
#define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng; #define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng;
#define YY_STEP LOCATION_STEP (*yylloc) #define YY_STEP LOCATION_STEP (*yylloc)
/* STRING_OBSTACK -- Used to store all the characters that we need to /* STRING_OBSTACK -- Used to store all the characters that we need to
keep (to construct ID, STRINGS etc.). Use the following macros to keep (to construct ID, STRINGS etc.). Use the following macros to
use it. use it.
@@ -825,7 +824,7 @@ static void handle_at PARAMS ((braced_code_t code_kind,
#define SC_PROLOGUE 7 #define SC_PROLOGUE 7
#define SC_EPILOGUE 8 #define SC_EPILOGUE 8
#line 829 "lex.yy.c" #line 828 "lex.yy.c"
/* Macros after this point can all be overridden by user definitions in /* Macros after this point can all be overridden by user definitions in
* section 1. * section 1.
@@ -987,7 +986,7 @@ YY_DECL
register char *yy_cp, *yy_bp; register char *yy_cp, *yy_bp;
register int yy_act; register int yy_act;
#line 98 "scan-gram.l" #line 97 "scan-gram.l"
/* At each yylex invocation, mark the current position as the /* At each yylex invocation, mark the current position as the
@@ -1010,7 +1009,7 @@ YY_DECL
/*----------------------------. /*----------------------------.
| Scanning Bison directives. | | Scanning Bison directives. |
`----------------------------*/ `----------------------------*/
#line 1014 "lex.yy.c" #line 1013 "lex.yy.c"
if ( yy_init ) if ( yy_init )
{ {
@@ -1112,197 +1111,197 @@ do_action: /* This label is used only to access EOF actions. */
case 1: case 1:
YY_RULE_SETUP YY_RULE_SETUP
#line 122 "scan-gram.l" #line 121 "scan-gram.l"
return PERCENT_NONASSOC; return PERCENT_NONASSOC;
YY_BREAK YY_BREAK
case 2: case 2:
YY_RULE_SETUP YY_RULE_SETUP
#line 123 "scan-gram.l" #line 122 "scan-gram.l"
return PERCENT_DEBUG; return PERCENT_DEBUG;
YY_BREAK YY_BREAK
case 3: case 3:
YY_RULE_SETUP YY_RULE_SETUP
#line 124 "scan-gram.l" #line 123 "scan-gram.l"
return PERCENT_DEFINE; return PERCENT_DEFINE;
YY_BREAK YY_BREAK
case 4: case 4:
YY_RULE_SETUP YY_RULE_SETUP
#line 125 "scan-gram.l" #line 124 "scan-gram.l"
return PERCENT_DEFINES; return PERCENT_DEFINES;
YY_BREAK YY_BREAK
case 5: case 5:
YY_RULE_SETUP YY_RULE_SETUP
#line 126 "scan-gram.l" #line 125 "scan-gram.l"
return PERCENT_DESTRUCTOR; return PERCENT_DESTRUCTOR;
YY_BREAK YY_BREAK
case 6: case 6:
YY_RULE_SETUP YY_RULE_SETUP
#line 127 "scan-gram.l" #line 126 "scan-gram.l"
return PERCENT_DPREC; return PERCENT_DPREC;
YY_BREAK YY_BREAK
case 7: case 7:
YY_RULE_SETUP YY_RULE_SETUP
#line 128 "scan-gram.l" #line 127 "scan-gram.l"
return PERCENT_ERROR_VERBOSE; return PERCENT_ERROR_VERBOSE;
YY_BREAK YY_BREAK
case 8: case 8:
YY_RULE_SETUP YY_RULE_SETUP
#line 129 "scan-gram.l" #line 128 "scan-gram.l"
return PERCENT_EXPECT; return PERCENT_EXPECT;
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
#line 130 "scan-gram.l" #line 129 "scan-gram.l"
return PERCENT_FILE_PREFIX; return PERCENT_FILE_PREFIX;
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
#line 131 "scan-gram.l" #line 130 "scan-gram.l"
return PERCENT_YACC; return PERCENT_YACC;
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
#line 132 "scan-gram.l" #line 131 "scan-gram.l"
return PERCENT_GLR_PARSER; return PERCENT_GLR_PARSER;
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
#line 133 "scan-gram.l" #line 132 "scan-gram.l"
return PERCENT_LEFT; return PERCENT_LEFT;
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
#line 134 "scan-gram.l" #line 133 "scan-gram.l"
return PERCENT_LOCATIONS; return PERCENT_LOCATIONS;
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
#line 135 "scan-gram.l" #line 134 "scan-gram.l"
return PERCENT_MERGE; return PERCENT_MERGE;
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 136 "scan-gram.l" #line 135 "scan-gram.l"
return PERCENT_NAME_PREFIX; return PERCENT_NAME_PREFIX;
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
#line 137 "scan-gram.l" #line 136 "scan-gram.l"
return PERCENT_NO_LINES; return PERCENT_NO_LINES;
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
#line 138 "scan-gram.l" #line 137 "scan-gram.l"
return PERCENT_NONASSOC; return PERCENT_NONASSOC;
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
#line 139 "scan-gram.l" #line 138 "scan-gram.l"
return PERCENT_NTERM; return PERCENT_NTERM;
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
#line 140 "scan-gram.l" #line 139 "scan-gram.l"
return PERCENT_OUTPUT; return PERCENT_OUTPUT;
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
#line 141 "scan-gram.l" #line 140 "scan-gram.l"
return PERCENT_PREC; return PERCENT_PREC;
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
#line 142 "scan-gram.l" #line 141 "scan-gram.l"
return PERCENT_PRINTER; return PERCENT_PRINTER;
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
#line 143 "scan-gram.l" #line 142 "scan-gram.l"
return PERCENT_PURE_PARSER; return PERCENT_PURE_PARSER;
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
#line 144 "scan-gram.l" #line 143 "scan-gram.l"
return PERCENT_RIGHT; return PERCENT_RIGHT;
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
#line 145 "scan-gram.l" #line 144 "scan-gram.l"
return PERCENT_SKELETON; return PERCENT_SKELETON;
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
#line 146 "scan-gram.l" #line 145 "scan-gram.l"
return PERCENT_START; return PERCENT_START;
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
#line 147 "scan-gram.l" #line 146 "scan-gram.l"
return PERCENT_TOKEN; return PERCENT_TOKEN;
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 148 "scan-gram.l" #line 147 "scan-gram.l"
return PERCENT_TOKEN; return PERCENT_TOKEN;
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
#line 149 "scan-gram.l" #line 148 "scan-gram.l"
return PERCENT_TOKEN_TABLE; return PERCENT_TOKEN_TABLE;
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
#line 150 "scan-gram.l" #line 149 "scan-gram.l"
return PERCENT_TYPE; return PERCENT_TYPE;
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 151 "scan-gram.l" #line 150 "scan-gram.l"
return PERCENT_UNION; return PERCENT_UNION;
YY_BREAK YY_BREAK
case 31: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 152 "scan-gram.l" #line 151 "scan-gram.l"
return PERCENT_VERBOSE; return PERCENT_VERBOSE;
YY_BREAK YY_BREAK
case 32: case 32:
YY_RULE_SETUP YY_RULE_SETUP
#line 153 "scan-gram.l" #line 152 "scan-gram.l"
return PERCENT_YACC; return PERCENT_YACC;
YY_BREAK YY_BREAK
case 33: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 155 "scan-gram.l" #line 154 "scan-gram.l"
return EQUAL; return EQUAL;
YY_BREAK YY_BREAK
case 34: case 34:
YY_RULE_SETUP YY_RULE_SETUP
#line 156 "scan-gram.l" #line 155 "scan-gram.l"
return COLON; return COLON;
YY_BREAK YY_BREAK
case 35: case 35:
YY_RULE_SETUP YY_RULE_SETUP
#line 157 "scan-gram.l" #line 156 "scan-gram.l"
return PIPE; return PIPE;
YY_BREAK YY_BREAK
case 36: case 36:
YY_RULE_SETUP YY_RULE_SETUP
#line 158 "scan-gram.l" #line 157 "scan-gram.l"
return SEMICOLON; return SEMICOLON;
YY_BREAK YY_BREAK
case 37: case 37:
YY_RULE_SETUP YY_RULE_SETUP
#line 160 "scan-gram.l" #line 159 "scan-gram.l"
YY_LINES; YY_STEP; YY_LINES; YY_STEP;
YY_BREAK YY_BREAK
case 38: case 38:
YY_RULE_SETUP YY_RULE_SETUP
#line 161 "scan-gram.l" #line 160 "scan-gram.l"
YY_STEP; YY_STEP;
YY_BREAK YY_BREAK
case 39: case 39:
YY_RULE_SETUP YY_RULE_SETUP
#line 162 "scan-gram.l" #line 161 "scan-gram.l"
{ {
yylval->symbol = symbol_get (yytext, *yylloc); yylval->symbol = symbol_get (yytext, *yylloc);
return ID; return ID;
@@ -1310,48 +1309,48 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 40: case 40:
YY_RULE_SETUP YY_RULE_SETUP
#line 167 "scan-gram.l" #line 166 "scan-gram.l"
yylval->integer = strtol (yytext, 0, 10); return INT; yylval->integer = strtol (yytext, 0, 10); return INT;
YY_BREAK YY_BREAK
/* Characters. We don't check there is only one. */ /* Characters. We don't check there is only one. */
case 41: case 41:
YY_RULE_SETUP YY_RULE_SETUP
#line 170 "scan-gram.l" #line 169 "scan-gram.l"
YY_OBS_GROW; yy_push_state (SC_ESCAPED_CHARACTER); YY_OBS_GROW; yy_push_state (SC_ESCAPED_CHARACTER);
YY_BREAK YY_BREAK
/* Strings. */ /* Strings. */
case 42: case 42:
YY_RULE_SETUP YY_RULE_SETUP
#line 173 "scan-gram.l" #line 172 "scan-gram.l"
YY_OBS_GROW; yy_push_state (SC_ESCAPED_STRING); YY_OBS_GROW; yy_push_state (SC_ESCAPED_STRING);
YY_BREAK YY_BREAK
/* Comments. */ /* Comments. */
case 43: case 43:
YY_RULE_SETUP YY_RULE_SETUP
#line 176 "scan-gram.l" #line 175 "scan-gram.l"
yy_push_state (SC_COMMENT); yy_push_state (SC_COMMENT);
YY_BREAK YY_BREAK
case 44: case 44:
YY_RULE_SETUP YY_RULE_SETUP
#line 177 "scan-gram.l" #line 176 "scan-gram.l"
YY_STEP; YY_STEP;
YY_BREAK YY_BREAK
/* Prologue. */ /* Prologue. */
case 45: case 45:
YY_RULE_SETUP YY_RULE_SETUP
#line 180 "scan-gram.l" #line 179 "scan-gram.l"
yy_push_state (SC_PROLOGUE); yy_push_state (SC_PROLOGUE);
YY_BREAK YY_BREAK
/* Code in between braces. */ /* Code in between braces. */
case 46: case 46:
YY_RULE_SETUP YY_RULE_SETUP
#line 183 "scan-gram.l" #line 182 "scan-gram.l"
YY_OBS_GROW; ++braces_level; yy_push_state (SC_BRACED_CODE); YY_OBS_GROW; ++braces_level; yy_push_state (SC_BRACED_CODE);
YY_BREAK YY_BREAK
/* A type. */ /* A type. */
case 47: case 47:
YY_RULE_SETUP YY_RULE_SETUP
#line 186 "scan-gram.l" #line 185 "scan-gram.l"
{ {
obstack_grow (&string_obstack, yytext + 1, yyleng - 2); obstack_grow (&string_obstack, yytext + 1, yyleng - 2);
YY_OBS_FINISH; YY_OBS_FINISH;
@@ -1361,7 +1360,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 48: case 48:
YY_RULE_SETUP YY_RULE_SETUP
#line 194 "scan-gram.l" #line 193 "scan-gram.l"
{ {
if (++percent_percent_count == 2) if (++percent_percent_count == 2)
yy_push_state (SC_EPILOGUE); yy_push_state (SC_EPILOGUE);
@@ -1370,7 +1369,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 49: case 49:
YY_RULE_SETUP YY_RULE_SETUP
#line 200 "scan-gram.l" #line 199 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": invalid character: `%c'\n", *yytext); fprintf (stderr, ": invalid character: `%c'\n", *yytext);
@@ -1387,12 +1386,12 @@ YY_RULE_SETUP
case 50: case 50:
YY_RULE_SETUP YY_RULE_SETUP
#line 216 "scan-gram.l" #line 215 "scan-gram.l"
if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@<:@"); if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@<:@");
YY_BREAK YY_BREAK
case 51: case 51:
YY_RULE_SETUP YY_RULE_SETUP
#line 217 "scan-gram.l" #line 216 "scan-gram.l"
if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@"); if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
YY_BREAK YY_BREAK
@@ -1403,7 +1402,7 @@ if (YY_START != SC_COMMENT) obstack_sgrow (&string_obstack, "@:>@");
case 52: case 52:
YY_RULE_SETUP YY_RULE_SETUP
#line 228 "scan-gram.l" #line 227 "scan-gram.l"
{ /* End of the comment. */ { /* End of the comment. */
if (yy_top_state () == INITIAL) if (yy_top_state () == INITIAL)
{ {
@@ -1418,21 +1417,21 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 53: case 53:
YY_RULE_SETUP YY_RULE_SETUP
#line 240 "scan-gram.l" #line 239 "scan-gram.l"
if (yy_top_state () != INITIAL) YY_OBS_GROW; if (yy_top_state () != INITIAL) YY_OBS_GROW;
YY_BREAK YY_BREAK
case 54: case 54:
YY_RULE_SETUP YY_RULE_SETUP
#line 241 "scan-gram.l" #line 240 "scan-gram.l"
if (yy_top_state () != INITIAL) YY_OBS_GROW; YY_LINES; if (yy_top_state () != INITIAL) YY_OBS_GROW; YY_LINES;
YY_BREAK YY_BREAK
case 55: case 55:
YY_RULE_SETUP YY_RULE_SETUP
#line 242 "scan-gram.l" #line 241 "scan-gram.l"
/* Stray `*'. */if (yy_top_state () != INITIAL) YY_OBS_GROW; /* Stray `*'. */if (yy_top_state () != INITIAL) YY_OBS_GROW;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_COMMENT): case YY_STATE_EOF(SC_COMMENT):
#line 244 "scan-gram.l" #line 243 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a comment\n"); fprintf (stderr, ": unexpected end of file in a comment\n");
@@ -1448,7 +1447,7 @@ case YY_STATE_EOF(SC_COMMENT):
case 56: case 56:
YY_RULE_SETUP YY_RULE_SETUP
#line 259 "scan-gram.l" #line 258 "scan-gram.l"
{ {
assert (yy_top_state () == INITIAL); assert (yy_top_state () == INITIAL);
YY_OBS_GROW; YY_OBS_GROW;
@@ -1460,16 +1459,16 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 57: case 57:
YY_RULE_SETUP YY_RULE_SETUP
#line 268 "scan-gram.l" #line 267 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 58: case 58:
YY_RULE_SETUP YY_RULE_SETUP
#line 270 "scan-gram.l" #line 269 "scan-gram.l"
obstack_1grow (&string_obstack, '\n'); YY_LINES; obstack_1grow (&string_obstack, '\n'); YY_LINES;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_ESCAPED_STRING): case YY_STATE_EOF(SC_ESCAPED_STRING):
#line 272 "scan-gram.l" #line 271 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a string\n"); fprintf (stderr, ": unexpected end of file in a string\n");
@@ -1489,7 +1488,7 @@ case YY_STATE_EOF(SC_ESCAPED_STRING):
case 59: case 59:
YY_RULE_SETUP YY_RULE_SETUP
#line 290 "scan-gram.l" #line 289 "scan-gram.l"
{ {
YY_OBS_GROW; YY_OBS_GROW;
assert (yy_top_state () == INITIAL); assert (yy_top_state () == INITIAL);
@@ -1507,16 +1506,16 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 60: case 60:
YY_RULE_SETUP YY_RULE_SETUP
#line 305 "scan-gram.l" #line 304 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 61: case 61:
YY_RULE_SETUP YY_RULE_SETUP
#line 307 "scan-gram.l" #line 306 "scan-gram.l"
obstack_1grow (&string_obstack, '\n'); YY_LINES; obstack_1grow (&string_obstack, '\n'); YY_LINES;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_ESCAPED_CHARACTER): case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
#line 309 "scan-gram.l" #line 308 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a character\n"); fprintf (stderr, ": unexpected end of file in a character\n");
@@ -1535,7 +1534,7 @@ case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
case 62: case 62:
YY_RULE_SETUP YY_RULE_SETUP
#line 327 "scan-gram.l" #line 326 "scan-gram.l"
{ {
long c = strtol (yytext + 1, 0, 8); long c = strtol (yytext + 1, 0, 8);
if (c > 255) if (c > 255)
@@ -1550,54 +1549,54 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 63: case 63:
YY_RULE_SETUP YY_RULE_SETUP
#line 339 "scan-gram.l" #line 338 "scan-gram.l"
{ {
obstack_1grow (&string_obstack, strtol (yytext + 2, 0, 16)); obstack_1grow (&string_obstack, strtol (yytext + 2, 0, 16));
} }
YY_BREAK YY_BREAK
case 64: case 64:
YY_RULE_SETUP YY_RULE_SETUP
#line 343 "scan-gram.l" #line 342 "scan-gram.l"
obstack_1grow (&string_obstack, '\a'); obstack_1grow (&string_obstack, '\a');
YY_BREAK YY_BREAK
case 65: case 65:
YY_RULE_SETUP YY_RULE_SETUP
#line 344 "scan-gram.l" #line 343 "scan-gram.l"
obstack_1grow (&string_obstack, '\b'); obstack_1grow (&string_obstack, '\b');
YY_BREAK YY_BREAK
case 66: case 66:
YY_RULE_SETUP YY_RULE_SETUP
#line 345 "scan-gram.l" #line 344 "scan-gram.l"
obstack_1grow (&string_obstack, '\f'); obstack_1grow (&string_obstack, '\f');
YY_BREAK YY_BREAK
case 67: case 67:
YY_RULE_SETUP YY_RULE_SETUP
#line 346 "scan-gram.l" #line 345 "scan-gram.l"
obstack_1grow (&string_obstack, '\n'); obstack_1grow (&string_obstack, '\n');
YY_BREAK YY_BREAK
case 68: case 68:
YY_RULE_SETUP YY_RULE_SETUP
#line 347 "scan-gram.l" #line 346 "scan-gram.l"
obstack_1grow (&string_obstack, '\r'); obstack_1grow (&string_obstack, '\r');
YY_BREAK YY_BREAK
case 69: case 69:
YY_RULE_SETUP YY_RULE_SETUP
#line 348 "scan-gram.l" #line 347 "scan-gram.l"
obstack_1grow (&string_obstack, '\t'); obstack_1grow (&string_obstack, '\t');
YY_BREAK YY_BREAK
case 70: case 70:
YY_RULE_SETUP YY_RULE_SETUP
#line 349 "scan-gram.l" #line 348 "scan-gram.l"
obstack_1grow (&string_obstack, '\v'); obstack_1grow (&string_obstack, '\v');
YY_BREAK YY_BREAK
case 71: case 71:
YY_RULE_SETUP YY_RULE_SETUP
#line 350 "scan-gram.l" #line 349 "scan-gram.l"
obstack_1grow (&string_obstack, yytext[1]); obstack_1grow (&string_obstack, yytext[1]);
YY_BREAK YY_BREAK
case 72: case 72:
YY_RULE_SETUP YY_RULE_SETUP
#line 351 "scan-gram.l" #line 350 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unrecognized escape: %s\n", quote (yytext)); fprintf (stderr, ": unrecognized escape: %s\n", quote (yytext));
@@ -1607,7 +1606,7 @@ YY_RULE_SETUP
/* FLex wants this rule, in case of a `\<<EOF>>'. */ /* FLex wants this rule, in case of a `\<<EOF>>'. */
case 73: case 73:
YY_RULE_SETUP YY_RULE_SETUP
#line 357 "scan-gram.l" #line 356 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
@@ -1619,7 +1618,7 @@ YY_OBS_GROW;
case 74: case 74:
YY_RULE_SETUP YY_RULE_SETUP
#line 368 "scan-gram.l" #line 367 "scan-gram.l"
{ {
YY_OBS_GROW; YY_OBS_GROW;
assert (yy_top_state () != INITIAL); assert (yy_top_state () != INITIAL);
@@ -1628,27 +1627,27 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 75: case 75:
YY_RULE_SETUP YY_RULE_SETUP
#line 374 "scan-gram.l" #line 373 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 76: case 76:
YY_RULE_SETUP YY_RULE_SETUP
#line 375 "scan-gram.l" #line 374 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
/* FLex wants this rule, in case of a `\<<EOF>>'. */ /* FLex wants this rule, in case of a `\<<EOF>>'. */
case 77: case 77:
YY_RULE_SETUP YY_RULE_SETUP
#line 377 "scan-gram.l" #line 376 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 78: case 78:
YY_RULE_SETUP YY_RULE_SETUP
#line 379 "scan-gram.l" #line 378 "scan-gram.l"
YY_OBS_GROW; YY_LINES; YY_OBS_GROW; YY_LINES;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_CHARACTER): case YY_STATE_EOF(SC_CHARACTER):
#line 381 "scan-gram.l" #line 380 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a character\n"); fprintf (stderr, ": unexpected end of file in a character\n");
@@ -1665,7 +1664,7 @@ case YY_STATE_EOF(SC_CHARACTER):
case 79: case 79:
YY_RULE_SETUP YY_RULE_SETUP
#line 397 "scan-gram.l" #line 396 "scan-gram.l"
{ {
assert (yy_top_state () != INITIAL); assert (yy_top_state () != INITIAL);
YY_OBS_GROW; YY_OBS_GROW;
@@ -1674,27 +1673,27 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 80: case 80:
YY_RULE_SETUP YY_RULE_SETUP
#line 403 "scan-gram.l" #line 402 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 81: case 81:
YY_RULE_SETUP YY_RULE_SETUP
#line 404 "scan-gram.l" #line 403 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
/* FLex wants this rule, in case of a `\<<EOF>>'. */ /* FLex wants this rule, in case of a `\<<EOF>>'. */
case 82: case 82:
YY_RULE_SETUP YY_RULE_SETUP
#line 406 "scan-gram.l" #line 405 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 83: case 83:
YY_RULE_SETUP YY_RULE_SETUP
#line 408 "scan-gram.l" #line 407 "scan-gram.l"
YY_OBS_GROW; YY_LINES; YY_OBS_GROW; YY_LINES;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_STRING): case YY_STATE_EOF(SC_STRING):
#line 410 "scan-gram.l" #line 409 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a string\n"); fprintf (stderr, ": unexpected end of file in a string\n");
@@ -1711,30 +1710,30 @@ case YY_STATE_EOF(SC_STRING):
/* Characters. We don't check there is only one. */ /* Characters. We don't check there is only one. */
case 84: case 84:
YY_RULE_SETUP YY_RULE_SETUP
#line 426 "scan-gram.l" #line 425 "scan-gram.l"
YY_OBS_GROW; yy_push_state (SC_CHARACTER); YY_OBS_GROW; yy_push_state (SC_CHARACTER);
YY_BREAK YY_BREAK
/* Strings. */ /* Strings. */
case 85: case 85:
YY_RULE_SETUP YY_RULE_SETUP
#line 429 "scan-gram.l" #line 428 "scan-gram.l"
YY_OBS_GROW; yy_push_state (SC_STRING); YY_OBS_GROW; yy_push_state (SC_STRING);
YY_BREAK YY_BREAK
/* Comments. */ /* Comments. */
case 86: case 86:
YY_RULE_SETUP YY_RULE_SETUP
#line 432 "scan-gram.l" #line 431 "scan-gram.l"
YY_OBS_GROW; yy_push_state (SC_COMMENT); YY_OBS_GROW; yy_push_state (SC_COMMENT);
YY_BREAK YY_BREAK
case 87: case 87:
YY_RULE_SETUP YY_RULE_SETUP
#line 433 "scan-gram.l" #line 432 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
/* Not comments. */ /* Not comments. */
case 88: case 88:
YY_RULE_SETUP YY_RULE_SETUP
#line 436 "scan-gram.l" #line 435 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
@@ -1746,7 +1745,7 @@ YY_OBS_GROW;
case 89: case 89:
YY_RULE_SETUP YY_RULE_SETUP
#line 447 "scan-gram.l" #line 446 "scan-gram.l"
{ {
YY_OBS_GROW; YY_OBS_GROW;
if (--braces_level == 0) if (--braces_level == 0)
@@ -1760,39 +1759,39 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 90: case 90:
YY_RULE_SETUP YY_RULE_SETUP
#line 458 "scan-gram.l" #line 457 "scan-gram.l"
YY_OBS_GROW; braces_level++; YY_OBS_GROW; braces_level++;
YY_BREAK YY_BREAK
case 91: case 91:
YY_RULE_SETUP YY_RULE_SETUP
#line 460 "scan-gram.l" #line 459 "scan-gram.l"
{ handle_dollar (current_braced_code, { handle_dollar (current_braced_code,
yytext, *yylloc); } yytext, *yylloc); }
YY_BREAK YY_BREAK
case 92: case 92:
YY_RULE_SETUP YY_RULE_SETUP
#line 462 "scan-gram.l" #line 461 "scan-gram.l"
{ handle_at (current_braced_code, { handle_at (current_braced_code,
yytext, *yylloc); } yytext, *yylloc); }
YY_BREAK YY_BREAK
case 93: case 93:
YY_RULE_SETUP YY_RULE_SETUP
#line 465 "scan-gram.l" #line 464 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 94: case 94:
YY_RULE_SETUP YY_RULE_SETUP
#line 466 "scan-gram.l" #line 465 "scan-gram.l"
YY_OBS_GROW; YY_LINES; YY_OBS_GROW; YY_LINES;
YY_BREAK YY_BREAK
/* A lose $, or /, or etc. */ /* A lose $, or /, or etc. */
case 95: case 95:
YY_RULE_SETUP YY_RULE_SETUP
#line 469 "scan-gram.l" #line 468 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_BRACED_CODE): case YY_STATE_EOF(SC_BRACED_CODE):
#line 471 "scan-gram.l" #line 470 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a braced code\n"); fprintf (stderr, ": unexpected end of file in a braced code\n");
@@ -1810,7 +1809,7 @@ case YY_STATE_EOF(SC_BRACED_CODE):
case 96: case 96:
YY_RULE_SETUP YY_RULE_SETUP
#line 489 "scan-gram.l" #line 488 "scan-gram.l"
{ {
yy_pop_state (); yy_pop_state ();
YY_OBS_FINISH; YY_OBS_FINISH;
@@ -1820,21 +1819,21 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 97: case 97:
YY_RULE_SETUP YY_RULE_SETUP
#line 496 "scan-gram.l" #line 495 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 98: case 98:
YY_RULE_SETUP YY_RULE_SETUP
#line 497 "scan-gram.l" #line 496 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case 99: case 99:
YY_RULE_SETUP YY_RULE_SETUP
#line 498 "scan-gram.l" #line 497 "scan-gram.l"
YY_OBS_GROW; YY_LINES; YY_OBS_GROW; YY_LINES;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_PROLOGUE): case YY_STATE_EOF(SC_PROLOGUE):
#line 500 "scan-gram.l" #line 499 "scan-gram.l"
{ {
LOCATION_PRINT (stderr, *yylloc); LOCATION_PRINT (stderr, *yylloc);
fprintf (stderr, ": unexpected end of file in a prologue\n"); fprintf (stderr, ": unexpected end of file in a prologue\n");
@@ -1853,11 +1852,11 @@ case YY_STATE_EOF(SC_PROLOGUE):
case 100: case 100:
YY_RULE_SETUP YY_RULE_SETUP
#line 518 "scan-gram.l" #line 517 "scan-gram.l"
YY_OBS_GROW; YY_OBS_GROW;
YY_BREAK YY_BREAK
case YY_STATE_EOF(SC_EPILOGUE): case YY_STATE_EOF(SC_EPILOGUE):
#line 520 "scan-gram.l" #line 519 "scan-gram.l"
{ {
yy_pop_state (); yy_pop_state ();
YY_OBS_FINISH; YY_OBS_FINISH;
@@ -1868,10 +1867,10 @@ case YY_STATE_EOF(SC_EPILOGUE):
case 101: case 101:
YY_RULE_SETUP YY_RULE_SETUP
#line 529 "scan-gram.l" #line 528 "scan-gram.l"
YY_FATAL_ERROR( "flex scanner jammed" ); YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK YY_BREAK
#line 1875 "lex.yy.c" #line 1874 "lex.yy.c"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
yyterminate(); yyterminate();
@@ -2761,7 +2760,7 @@ int main()
return 0; return 0;
} }
#endif #endif
#line 529 "scan-gram.l" #line 528 "scan-gram.l"
/*------------------------------------------------------------------. /*------------------------------------------------------------------.
@@ -2967,4 +2966,6 @@ void
scanner_free (void) scanner_free (void)
{ {
obstack_free (&string_obstack, 0); obstack_free (&string_obstack, 0);
/* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER);
} }

View File

@@ -42,7 +42,6 @@ do { \
#define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng; #define YY_LINES LOCATION_LINES (*yylloc, yyleng); lineno += yyleng;
#define YY_STEP LOCATION_STEP (*yylloc) #define YY_STEP LOCATION_STEP (*yylloc)
/* STRING_OBSTACK -- Used to store all the characters that we need to /* STRING_OBSTACK -- Used to store all the characters that we need to
keep (to construct ID, STRINGS etc.). Use the following macros to keep (to construct ID, STRINGS etc.). Use the following macros to
use it. use it.
@@ -731,4 +730,6 @@ void
scanner_free (void) scanner_free (void)
{ {
obstack_free (&string_obstack, 0); obstack_free (&string_obstack, 0);
/* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER);
} }

View File

@@ -23,6 +23,8 @@
%{ %{
#include "system.h" #include "system.h"
#include "error.h"
#include "getargs.h"
#include "files.h" #include "files.h"
int skel_lex PARAMS ((void)); int skel_lex PARAMS ((void));
static int yylineno = 1; static int yylineno = 1;
@@ -38,8 +40,8 @@ static char *yyoutname = NULL;
yylineno = 1; yylineno = 1;
} }
"@<:@" fputc ('[', yyout); "@<:@" fputc ('[', yyout);
"@:>@" fputc (']', yyout); "@:>@" fputc (']', yyout);
"__oline__" fprintf (yyout, "%d", yylineno+1); "__oline__" fprintf (yyout, "%d", yylineno+1);
"__ofile__" fprintf (yyout, "%s", yyoutname); "__ofile__" fprintf (yyout, "%s", yyoutname);
@@ -47,4 +49,52 @@ static char *yyoutname = NULL;
\n+ yylineno += yyleng; ECHO; \n+ yylineno += yyleng; ECHO;
. ECHO; . ECHO;
<<EOF>> xfclose (yyout); free (yyoutname); return EOF;
%% %%
/* From lib/readpipe.c. */
FILE *readpipe PARAMS ((const char *, ...));
/*----------------------.
| Run our backend, M4. |
`----------------------*/
void m4_invoke PARAMS ((const char *definitions));
void
m4_invoke (const char *definitions)
{
/* Invoke m4 on the definition of the muscles, and the skeleton. */
const char *bison_pkgdatadir = getenv ("BISON_PKGDATADIR");
const char *m4 = getenv ("M4");
int pkg_data_len;
char *full_skeleton;
if (!m4)
m4 = M4;
if (!bison_pkgdatadir)
bison_pkgdatadir = PKGDATADIR;
pkg_data_len = strlen (bison_pkgdatadir);
full_skeleton = XMALLOC (char, pkg_data_len + strlen (skeleton) + 2);
if (bison_pkgdatadir[pkg_data_len-1] == '/')
sprintf (full_skeleton, "%s%s", bison_pkgdatadir, skeleton);
else
sprintf (full_skeleton, "%s/%s", bison_pkgdatadir, skeleton);
if (trace_flag)
fprintf (stderr,
"running: %s -I %s m4sugar/m4sugar.m4 %s %s\n",
m4, bison_pkgdatadir, definitions, full_skeleton);
skel_in = readpipe (m4,
"-I", bison_pkgdatadir,
"m4sugar/m4sugar.m4",
definitions,
full_skeleton,
NULL);
XFREE (full_skeleton);
if (!skel_in)
error (EXIT_FAILURE, errno, "cannot run m4");
skel_lex ();
/* Reclaim Flex's buffers. */
yy_delete_buffer (YY_CURRENT_BUFFER);
}

View File

@@ -464,6 +464,7 @@ void
symbols_free (void) symbols_free (void)
{ {
hash_free (symbol_table); hash_free (symbol_table);
free (symbols);
} }