* src/system.h (obstack_grow_literal_string): Rename as...

(obstack_grow_string): this.
* src/output.c (output_parser): Recognize `%% actions' instead of
`$'.
* src/bison.s1: s/$/%% actions/.
* src/bison.hairy: Likewise.
This commit is contained in:
Akim Demaille
2000-12-19 14:51:24 +00:00
parent ef7ddeddaa
commit 573c1d9ff8
7 changed files with 149 additions and 118 deletions

View File

@@ -1,3 +1,12 @@
2000-12-19 Akim Demaille <akim@epita.fr>
* src/system.h (obstack_grow_literal_string): Rename as...
(obstack_grow_string): this.
* src/output.c (output_parser): Recognize `%% actions' instead of
`$'.
* src/bison.s1: s/$/%% actions/.
* src/bison.hairy: Likewise.
2000-12-19 Akim Demaille <akim@epita.fr> 2000-12-19 Akim Demaille <akim@epita.fr>
* src/output.c (output_parser): Compute the `#line' lines when * src/output.c (output_parser): Compute the `#line' lines when

View File

@@ -1,4 +1,4 @@
/* -*- C -*- */
extern int timeclock; extern int timeclock;
@@ -261,7 +261,7 @@ yyresume:
yylsp->last_line = (yylsp+yylen-1)->last_line; yylsp->last_line = (yylsp+yylen-1)->last_line;
yylsp->last_column = (yylsp+yylen-1)->last_column; yylsp->last_column = (yylsp+yylen-1)->last_column;
} }
if (yyptr == yyrq + YYMAXRULES) if (yyptr == yyrq + YYMAXRULES)
yyptr = yyrq; yyptr = yyrq;
} }
@@ -331,4 +331,4 @@ yyerrlab:
goto yyresume; goto yyresume;
} }
$ %% actions

View File

@@ -78,10 +78,6 @@
# define YYSTACK_ALLOC malloc # define YYSTACK_ALLOC malloc
#endif #endif
/* Note: there must be only one dollar sign in this file.
It is replaced by the list of actions, each action
as one case of the switch. */
#define yyerrok (yyerrstatus = 0) #define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY) #define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2 #define YYEMPTY -2
@@ -583,7 +579,7 @@ yyreduce:
yylen = yyr2[yyn]; yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action: /* If YYLEN is nonzero, implement the default value of the action:
`{dollar}{dollar} = {dollar}1'. `$$ = $1'.
Otherwise, the following line sets YYVAL to the semantic value of Otherwise, the following line sets YYVAL to the semantic value of
the lookahead token. This behavior is undocumented and Bison the lookahead token. This behavior is undocumented and Bison
@@ -615,7 +611,7 @@ yyreduce:
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
} }
#endif #endif
$ /* The action file replaces this line marked with this dollarsign. */ %% actions /* The action file replaces this line. */
#line #line
yyvsp -= yylen; yyvsp -= yylen;

View File

@@ -78,10 +78,6 @@
# define YYSTACK_ALLOC malloc # define YYSTACK_ALLOC malloc
#endif #endif
/* Note: there must be only one dollar sign in this file.
It is replaced by the list of actions, each action
as one case of the switch. */
#define yyerrok (yyerrstatus = 0) #define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY) #define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2 #define YYEMPTY -2
@@ -583,7 +579,7 @@ yyreduce:
yylen = yyr2[yyn]; yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action: /* If YYLEN is nonzero, implement the default value of the action:
`{dollar}{dollar} = {dollar}1'. `$$ = $1'.
Otherwise, the following line sets YYVAL to the semantic value of Otherwise, the following line sets YYVAL to the semantic value of
the lookahead token. This behavior is undocumented and Bison the lookahead token. This behavior is undocumented and Bison
@@ -615,7 +611,7 @@ yyreduce:
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
} }
#endif #endif
$ /* The action file replaces this line marked with this dollarsign. */ %% actions /* The action file replaces this line. */
#line #line
yyvsp -= yylen; yyvsp -= yylen;

View File

@@ -150,7 +150,7 @@ output_short_or_char_table (struct obstack *oout,
if (j >= 10) if (j >= 10)
{ {
obstack_grow_literal_string (oout, "\n "); obstack_grow_string (oout, "\n ");
j = 1; j = 1;
} }
else else
@@ -161,7 +161,7 @@ output_short_or_char_table (struct obstack *oout,
obstack_fgrow1 (oout, "%6d", short_table[i]); obstack_fgrow1 (oout, "%6d", short_table[i]);
} }
obstack_grow_literal_string (oout, "\n};\n"); obstack_grow_string (oout, "\n};\n");
} }
@@ -234,7 +234,7 @@ output_headers (void)
if (semantic_parser) if (semantic_parser)
obstack_fgrow1 (&action_obstack, ACTSTR, attrsfile_quoted); obstack_fgrow1 (&action_obstack, ACTSTR, attrsfile_quoted);
else else
obstack_grow_literal_string (&action_obstack, ACTSTR_SIMPLE); obstack_grow_string (&action_obstack, ACTSTR_SIMPLE);
/* if (semantic_parser) JF moved this below /* if (semantic_parser) JF moved this below
fprintf(ftable, "#include \"%s\"\n", attrsfile); fprintf(ftable, "#include \"%s\"\n", attrsfile);
@@ -278,9 +278,9 @@ output_trailers (void)
return; return;
if (semantic_parser) if (semantic_parser)
obstack_grow_literal_string (&action_obstack, " }\n"); obstack_grow_string (&action_obstack, " }\n");
obstack_grow_literal_string (&action_obstack, "}\n"); obstack_grow_string (&action_obstack, "}\n");
} }
@@ -288,7 +288,7 @@ output_trailers (void)
static void static void
output_token_translations (void) output_token_translations (void)
{ {
obstack_grow_literal_string (&table_obstack, "\ obstack_grow_string (&table_obstack, "\
\n\ \n\
/* YYRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */\n"); /* YYRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */\n");
@@ -308,8 +308,8 @@ output_token_translations (void)
} }
else else
{ {
obstack_grow_literal_string (&table_obstack, obstack_grow_string (&table_obstack,
"\n#define YYTRANSLATE(x) (x)\n"); "\n#define YYTRANSLATE(x) (x)\n");
} }
} }
@@ -321,7 +321,7 @@ output_gram (void)
yyprhs and yyrhs are needed only for yydebug. */ yyprhs and yyrhs are needed only for yydebug. */
/* With the no_parser option, all tables are generated */ /* With the no_parser option, all tables are generated */
if (!semantic_parser && !no_parser_flag) if (!semantic_parser && !no_parser_flag)
obstack_grow_literal_string (&table_obstack, "\n#if YYDEBUG != 0\n"); obstack_grow_string (&table_obstack, "\n#if YYDEBUG != 0\n");
output_short_table (&table_obstack, NULL, "yyprhs", rrhs, output_short_table (&table_obstack, NULL, "yyprhs", rrhs,
0, 1, nrules + 1); 0, 1, nrules + 1);
@@ -344,7 +344,7 @@ output_gram (void)
} }
if (!semantic_parser && !no_parser_flag) if (!semantic_parser && !no_parser_flag)
obstack_grow_literal_string (&table_obstack, "\n#endif\n"); obstack_grow_string (&table_obstack, "\n#endif\n");
} }
@@ -363,7 +363,7 @@ output_rule_data (void)
int j; int j;
short *short_tab = NULL; short *short_tab = NULL;
obstack_grow_literal_string (&table_obstack, "\n\ obstack_grow_string (&table_obstack, "\n\
#if YYDEBUG != 0\n"); #if YYDEBUG != 0\n");
output_short_table (&table_obstack, output_short_table (&table_obstack,
@@ -371,7 +371,7 @@ output_rule_data (void)
"yyrline", rline, "yyrline", rline,
0, 1, nrules + 1); 0, 1, nrules + 1);
obstack_grow_literal_string (&table_obstack, "#endif\n\n"); obstack_grow_string (&table_obstack, "#endif\n\n");
if (token_table_flag || no_parser_flag) if (token_table_flag || no_parser_flag)
{ {
@@ -385,11 +385,11 @@ output_rule_data (void)
/* Output the table of symbol names. */ /* Output the table of symbol names. */
if (!token_table_flag && !no_parser_flag) if (!token_table_flag && !no_parser_flag)
obstack_grow_literal_string (&table_obstack, obstack_grow_string (&table_obstack,
"\n#if YYDEBUG != 0 || defined YYERROR_VERBOSE\n\n"); "\n#if YYDEBUG != 0 || defined YYERROR_VERBOSE\n\n");
obstack_grow_literal_string (&table_obstack, "\ obstack_grow_string (&table_obstack, "\
/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */\n"); /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */\n");
obstack_grow_literal_string (&table_obstack, obstack_grow_string (&table_obstack,
"static const char *const yytname[] =\n{\n "); "static const char *const yytname[] =\n{\n ");
j = 0; j = 0;
@@ -413,7 +413,7 @@ output_rule_data (void)
if (j + strsize > 75) if (j + strsize > 75)
{ {
obstack_grow_literal_string (&table_obstack, "\n "); obstack_grow_string (&table_obstack, "\n ");
j = 2; j = 2;
} }
@@ -421,39 +421,27 @@ output_rule_data (void)
for (p = tags[i]; p && *p; p++) for (p = tags[i]; p && *p; p++)
{ {
if (*p == '"' || *p == '\\') if (*p == '"' || *p == '\\')
{ obstack_fgrow1 (&table_obstack, "\\%c", *p);
obstack_fgrow1 (&table_obstack, "\\%c", *p);
}
else if (*p == '\n') else if (*p == '\n')
{ obstack_grow_string (&table_obstack, "\\n");
obstack_grow_literal_string (&table_obstack, "\\n");
}
else if (*p == '\t') else if (*p == '\t')
{ obstack_grow_string (&table_obstack, "\\t");
obstack_grow_literal_string (&table_obstack, "\\t");
}
else if (*p == '\b') else if (*p == '\b')
{ obstack_grow_string (&table_obstack, "\\b");
obstack_grow_literal_string (&table_obstack, "\\b");
}
else if (*p < 040 || *p >= 0177) else if (*p < 040 || *p >= 0177)
{ obstack_fgrow1 (&table_obstack, "\\%03o", *p);
obstack_fgrow1 (&table_obstack, "\\%03o", *p);
}
else else
{ obstack_1grow (&table_obstack, *p);
obstack_1grow (&table_obstack, *p);
}
} }
obstack_grow_literal_string (&table_obstack, "\", "); obstack_grow_string (&table_obstack, "\", ");
j += strsize; j += strsize;
} }
/* add a NULL entry to list of tokens */ /* add a NULL entry to list of tokens */
obstack_grow_literal_string (&table_obstack, "NULL\n};\n"); obstack_grow_string (&table_obstack, "NULL\n};\n");
if (!token_table_flag && !no_parser_flag) if (!token_table_flag && !no_parser_flag)
obstack_grow_literal_string (&table_obstack, "#endif\n\n"); obstack_grow_string (&table_obstack, "#endif\n\n");
/* Output YYTOKNUM. */ /* Output YYTOKNUM. */
if (token_table_flag) if (token_table_flag)
@@ -1164,10 +1152,10 @@ output_parser (void)
FILE *fskel; FILE *fskel;
size_t line; size_t line;
const char *skeleton = NULL; const char *skeleton = NULL;
int number_of_dollar_signs = 0; int actions_dumped = 0;
if (pure_parser) if (pure_parser)
obstack_grow_literal_string (&table_obstack, "#define YYPURE 1\n\n"); obstack_grow_string (&table_obstack, "#define YYPURE 1\n\n");
/* Loop over lines in the standard parser file. */ /* Loop over lines in the standard parser file. */
if (semantic_parser) if (semantic_parser)
@@ -1184,63 +1172,106 @@ output_parser (void)
while (1) while (1)
{ {
int is_sync_line = 0; enum line_type_e
int write_line = 1; {
regular_line,
sync_line, /* #line. */
actions_line /* %% actions. */
};
enum line_type_e line_type = regular_line;
c = getc (fskel); c = getc (fskel);
/* See if the line starts with `#line'. */ /* Is this line special? */
if (c == '#') if (c == '#')
if ((c = getc (fskel)) == 'l') {
if ((c = getc (fskel)) == 'i') /* See if it's a `#line' line. */
if ((c = getc (fskel)) == 'n') if ((c = getc (fskel)) == 'l')
if ((c = getc (fskel)) == 'e') if ((c = getc (fskel)) == 'i')
is_sync_line = 1; if ((c = getc (fskel)) == 'n')
if ((c = getc (fskel)) == 'e')
line_type = sync_line;
else
obstack_grow_string (&table_obstack, "#lin");
else else
obstack_grow_literal_string (&table_obstack, "#lin"); obstack_grow_string (&table_obstack, "#li");
else else
obstack_grow_literal_string (&table_obstack, "#li"); obstack_grow_string (&table_obstack, "#l");
else else
obstack_grow_literal_string (&table_obstack, "#l"); obstack_grow_string (&table_obstack, "#");
else }
obstack_grow_literal_string (&table_obstack, "#"); else if (c == '%')
{
/* If was a `#line' line, either compute it, or drop it. */ /* See if it's a `%% actions' line. */
if (is_sync_line && !no_lines_flag) if ((c = getc (fskel)) == '%')
obstack_fgrow2 (&table_obstack, "#line %d %s\n", if ((c = getc (fskel)) == ' ')
line, quotearg_style (c_quoting_style, skeleton)); if ((c = getc (fskel)) == 'a')
if ((c = getc (fskel)) == 'c')
if (is_sync_line) if ((c = getc (fskel)) == 't')
write_line = 0; if ((c = getc (fskel)) == 'i')
if ((c = getc (fskel)) == 'o')
/* now write out the line... */ if ((c = getc (fskel)) == 'n')
for (; c != '\n' && c != EOF; c = getc (fskel)) if ((c = getc (fskel)) == 's')
if (write_line) line_type = actions_line;
{ else
/* `$' in the parser file indicates where to put the obstack_grow_string (&table_obstack, "%% action");
actions. Copy them in at this point. */ else
if (c == '$') obstack_grow_string (&table_obstack, "%% actio");
{ else
size_t size = obstack_object_size (&action_obstack); obstack_grow_string (&table_obstack, "%% acti");
else
number_of_dollar_signs++; obstack_grow_string (&table_obstack, "%% act");
assert (number_of_dollar_signs == 1); else
obstack_grow (&table_obstack, obstack_grow_string (&table_obstack, "%% ac");
obstack_finish (&action_obstack), else
size); obstack_grow_string (&table_obstack, "%% a");
else
/* Skip the end of the line containing `$'. */ obstack_grow_string (&table_obstack, "%% ");
write_line = 0;
}
else else
obstack_1grow (&table_obstack, c); obstack_grow_string (&table_obstack, "%%");
else
obstack_grow_string (&table_obstack, "%");
}
switch (line_type)
{
case sync_line:
if (!no_lines_flag)
obstack_fgrow2 (&table_obstack, "#line %d %s\n",
line, quotearg_style (c_quoting_style, skeleton));
/* Skip the end of line. */
for (; c != '\n' && c != EOF; c = getc (fskel))
/* nothing */;
break;
case actions_line:
{
size_t size = obstack_object_size (&action_obstack);
actions_dumped++;
assert (actions_dumped == 1);
obstack_grow (&table_obstack,
obstack_finish (&action_obstack),
size);
} }
/* Skip the end of line. */
for (; c != '\n' && c != EOF; c = getc (fskel))
/* nothing */;
break;
case regular_line:
for (; c != '\n' && c != EOF; c = getc (fskel))
obstack_1grow (&table_obstack, c);
}
if (c == EOF) if (c == EOF)
break; break;
obstack_1grow (&table_obstack, c); obstack_1grow (&table_obstack, c);
line++; line++;
} }
assert (number_of_dollar_signs == 1); assert (actions_dumped == 1);
xfclose (fskel); xfclose (fskel);
} }
@@ -1291,7 +1322,7 @@ output (void)
} }
reader_output_yylsp (&table_obstack); reader_output_yylsp (&table_obstack);
if (debug_flag) if (debug_flag)
obstack_grow_literal_string (&table_obstack, "\ obstack_grow_string (&table_obstack, "\
#ifndef YYDEBUG\n\ #ifndef YYDEBUG\n\
# define YYDEBUG 1\n\ # define YYDEBUG 1\n\
#endif\n\ #endif\n\
@@ -1302,10 +1333,10 @@ output (void)
quotearg_style (c_quoting_style, attrsfile)); quotearg_style (c_quoting_style, attrsfile));
if (!no_parser_flag) if (!no_parser_flag)
obstack_grow_literal_string (&table_obstack, "#include <stdio.h>\n\n"); obstack_grow_string (&table_obstack, "#include <stdio.h>\n\n");
/* Make "const" do nothing if not in ANSI C. */ /* Make "const" do nothing if not in ANSI C. */
obstack_grow_literal_string (&table_obstack, "\ obstack_grow_string (&table_obstack, "\
#ifndef __cplusplus\n\ #ifndef __cplusplus\n\
# ifndef __STDC__\n\ # ifndef __STDC__\n\
# define const\n\ # define const\n\

View File

@@ -343,7 +343,7 @@ copy_at (FILE *fin, FILE *fout, struct obstack *oout, int stack_offset)
if (fout) if (fout)
fprintf (fout, "yyloc"); fprintf (fout, "yyloc");
if (oout) if (oout)
obstack_grow_literal_string (oout, "yyloc"); obstack_grow_string (oout, "yyloc");
locations_flag = 1; locations_flag = 1;
} }
else if (isdigit (c) || c == '-') else if (isdigit (c) || c == '-')
@@ -401,7 +401,7 @@ copy_dollar (FILE *fin, FILE *fout, struct obstack *oout,
if (fout) if (fout)
fputs ("yyval", fout); fputs ("yyval", fout);
if (oout) if (oout)
obstack_grow_literal_string (oout, "yyval"); obstack_grow_string (oout, "yyval");
if (!type_name) if (!type_name)
type_name = get_type_name (0, rule); type_name = get_type_name (0, rule);
@@ -786,9 +786,9 @@ parse_union_decl (void)
else else
obstack_1grow (&attrs_obstack, '\n'); obstack_1grow (&attrs_obstack, '\n');
obstack_grow_literal_string (&attrs_obstack, "typedef union"); obstack_grow_string (&attrs_obstack, "typedef union");
if (defines_flag) if (defines_flag)
obstack_grow_literal_string (&defines_obstack, "typedef union"); obstack_grow_string (&defines_obstack, "typedef union");
c = getc (finput); c = getc (finput);
@@ -818,9 +818,9 @@ parse_union_decl (void)
count--; count--;
if (count <= 0) if (count <= 0)
{ {
obstack_grow_literal_string (&attrs_obstack, " YYSTYPE;\n"); obstack_grow_string (&attrs_obstack, " YYSTYPE;\n");
if (defines_flag) if (defines_flag)
obstack_grow_literal_string (&defines_obstack, " YYSTYPE;\n"); obstack_grow_string (&defines_obstack, " YYSTYPE;\n");
/* JF don't choke on trailing semi */ /* JF don't choke on trailing semi */
c = skip_white_space (); c = skip_white_space ();
if (c != ';') if (c != ';')
@@ -1117,8 +1117,7 @@ copy_action (symbol_list *rule, int stack_offset)
} }
} }
obstack_grow_literal_string (&action_obstack, obstack_grow_string (&action_obstack, ";\n break;}");
";\n break;}");
} }
/*-------------------------------------------------------------------. /*-------------------------------------------------------------------.
@@ -1597,10 +1596,10 @@ readgram (void)
/* We used to use `unsigned long' as YYSTYPE on MSDOS, /* We used to use `unsigned long' as YYSTYPE on MSDOS,
but it seems better to be consistent. but it seems better to be consistent.
Most programs should declare their own type anyway. */ Most programs should declare their own type anyway. */
obstack_grow_literal_string (&attrs_obstack, obstack_grow_string (&attrs_obstack,
"#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n"); "#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n");
if (defines_flag) if (defines_flag)
obstack_grow_literal_string (&defines_obstack, "\ obstack_grow_string (&defines_obstack, "\
#ifndef YYSTYPE\n\ #ifndef YYSTYPE\n\
# define YYSTYPE int\n\ # define YYSTYPE int\n\
#endif\n"); #endif\n");
@@ -1810,8 +1809,8 @@ packsymbols (void)
obstack_fgrow1 (&defines_obstack, "\nextern YYSTYPE %slval;\n", obstack_fgrow1 (&defines_obstack, "\nextern YYSTYPE %slval;\n",
spec_name_prefix); spec_name_prefix);
else else
obstack_grow_literal_string (&defines_obstack, obstack_grow_string (&defines_obstack,
"\nextern YYSTYPE yylval;\n"); "\nextern YYSTYPE yylval;\n");
} }
if (semantic_parser) if (semantic_parser)
@@ -1963,7 +1962,7 @@ reader (void)
no_parser_flag ? "Bison-generated parse tables" : "A Bison parser", no_parser_flag ? "Bison-generated parse tables" : "A Bison parser",
infile, VERSION); infile, VERSION);
obstack_grow_literal_string (&table_obstack, obstack_grow_string (&table_obstack,
"#define YYBISON 1 /* Identify Bison output. */\n\n"); "#define YYBISON 1 /* Identify Bison output. */\n\n");
read_declarations (); read_declarations ();
/* Start writing the guard and action files, if they are needed. */ /* Start writing the guard and action files, if they are needed. */
@@ -1978,7 +1977,7 @@ reader (void)
/* Write closing delimiters for actions and guards. */ /* Write closing delimiters for actions and guards. */
output_trailers (); output_trailers ();
if (locations_flag) if (locations_flag)
obstack_grow_literal_string (&table_obstack, "#define YYLSP_NEEDED 1\n\n"); obstack_grow_string (&table_obstack, "#define YYLSP_NEEDED 1\n\n");
/* Assign the symbols their symbol numbers. Write #defines for the /* Assign the symbols their symbol numbers. Write #defines for the
token symbols into FDEFINES if requested. */ token symbols into FDEFINES if requested. */
packsymbols (); packsymbols ();
@@ -1999,7 +1998,7 @@ void
reader_output_yylsp (struct obstack *oout) reader_output_yylsp (struct obstack *oout)
{ {
if (locations_flag) if (locations_flag)
obstack_grow_literal_string (oout, "\ obstack_grow_string (oout, "\
\n\ \n\
#ifndef YYLTYPE\n\ #ifndef YYLTYPE\n\
typedef struct yyltype\n\ typedef struct yyltype\n\

View File

@@ -145,7 +145,7 @@ typedef int bool;
#define obstack_chunk_free free #define obstack_chunk_free free
#include "obstack.h" #include "obstack.h"
#define obstack_grow_literal_string(Obs, Str) \ #define obstack_grow_string(Obs, Str) \
obstack_grow (Obs, Str, sizeof (Str) - 1) obstack_grow (Obs, Str, sizeof (Str) - 1)
#define obstack_fgrow1(Obs, Format, Arg1) \ #define obstack_fgrow1(Obs, Format, Arg1) \