2007-01-23 Paolo Bonzini <bonzini@gnu.org>

Simplify implementation of unqualified %code, implement macros for
	uniform treatment of boolean %define flags.  Document %define.
	* data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if,
	b4_percent_code_ifdef): New.
	(b4_percent_code_get): Map unqualified %code to b4_percent_code().
	* data/c++.m4: Define default value for global_tokens_and_yystype.
	* data/glr.cc: Likewise.
	* data/location.cc: Use b4_percent_define_flag_if.

	* doc/bison.texinfo (Directives): Document %define.

	* src/parse-gram.y (Unqualified %code): Change muscle name to
	b4_percent_code().
	(content.opt): Default to empty.
This commit is contained in:
Paolo Bonzini
2007-01-23 12:24:27 +00:00
parent 5f340b4884
commit 592d0b1eb5
10 changed files with 203 additions and 144 deletions

View File

@@ -1,3 +1,20 @@
2007-01-23 Paolo Bonzini <bonzini@gnu.org>
Simplify implementation of unqualified %code, implement macros for
uniform treatment of boolean %define flags. Document %define.
* data/bison.m4 (b4_percent_define_ifdef, b4_percent_define_flag_if,
b4_percent_code_ifdef): New.
(b4_percent_code_get): Map unqualified %code to b4_percent_code().
* data/c++.m4: Define default value for global_tokens_and_yystype.
* data/glr.cc: Likewise.
* data/location.cc: Use b4_percent_define_flag_if.
* doc/bison.texinfo (Directives): Document %define.
* src/parse-gram.y (Unqualified %code): Change muscle name to
b4_percent_code().
(content.opt): Default to empty.
2007-01-17 Joel E. Denny <jdenny@ces.clemson.edu>
Implement support for relative and absolute skeleton file names.

View File

@@ -349,6 +349,30 @@ m4_define([b4_percent_define_get],
[m4_define([b4_percent_define_skeleton_variables(]$1[)])dnl
m4_ifdef([b4_percent_define(]$1[)], [m4_indir([b4_percent_define(]$1[)])])])
# b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
# ------------------------------------------------------
# If the %define variable VARIABLE is defined, expand IF-TRUE, else expand
# IF-FALSE. Also, record the skeleton's usage of VARIABLE by defining
# b4_percent_define_skeleton_variables(VARIABLE).
m4_define([b4_percent_define_ifdef],
[m4_ifdef([b4_percent_define(]$1[)],
[m4_define([b4_percent_define_skeleton_variables(]$1[)])$2],
[$3])])
# b4_percent_define_flag_if(VARIABLE, IF-TRUE, [IF-FALSE])
# --------------------------------------------------------
# If the %define variable VARIABLE is defined to anything but "0" or "false",
# expand IF-TRUE. If it is defined to "0" or "false", expand IF-FALSE. If
# it is undefined, raise an error (this macro should be preceded by
# b4_percent_define_default). Also, record the skeleton's usage of VARIABLE by
# defining b4_percent_define_skeleton_variables(VARIABLE).
m4_define([b4_percent_define_flag_if],
[b4_percent_define_ifdef([$1],
[m4_case(b4_percent_define_get([$1]),
[0], [$3], [false], [$3],
[$2])],
[m4_fatal([invalid %define variable passed to b4_percent_define_flag_if: ]$1)])])
# b4_percent_define_default(VARIABLE, DEFAULT)
# --------------------------------------------
# If the %define variable VARIABLE is undefined, set its value to DEFAULT.
@@ -364,9 +388,9 @@ m4_define([b4_percent_define_default],
# --------------------------------
# If any %code blocks for QUALIFIER are defined, emit them beginning with a
# comment and ending with synclines and a newline. If QUALIFIER is not
# specified (thus, b4_percent_code_get is invoked without parens), do this for
# the unqualified %code blocks. Also, record the skeleton's usage of QUALIFIER
# (if specified) by defining b4_percent_code_skeleton_qualifiers(QUALIFIER).
# specified or empty, do this for the unqualified %code blocks. Also, record
# the skeleton's usage of QUALIFIER (if specified) by defining
# b4_percent_code_skeleton_qualifiers(QUALIFIER).
#
# For example, to emit any unqualified %code blocks followed by any %code
# blocks for the qualifier foo:
@@ -374,9 +398,8 @@ m4_define([b4_percent_define_default],
# b4_percent_code_get
# b4_percent_code_get([[foo]])
m4_define([b4_percent_code_get],
[m4_pushdef([b4_macro_name], [[b4_percent_code]]m4_if([$#], [1], [[[(]$1[)]]],
[[[_unqualified]]]))dnl
m4_if([$#], [1], [m4_define([b4_percent_code_skeleton_qualifiers(]$1[)])])dnl
[m4_pushdef([b4_macro_name], [[b4_percent_code(]$1[)]])dnl
m4_ifval([$1], [m4_define([b4_percent_code_skeleton_qualifiers(]$1[)])])dnl
m4_ifdef(b4_macro_name,
[b4_comment([m4_if([$#], [0], [[Unqualified %code]],
[[%code "]$1["]])[ blocks.]])
@@ -384,6 +407,17 @@ b4_user_code([m4_indir(b4_macro_name)])
])dnl
m4_popdef([b4_macro_name])])
# b4_percent_code_ifdef(QUALIFIER, IF-TRUE, [IF-FALSE])
# -----------------------------------------------------
# If any %code blocks for QUALIFIER (or unqualified %code blocks if
# QUALIFIER is empty) are defined, expand IF-TRUE, else expand IF-FALSE.
# Also, record the skeleton's usage of QUALIFIER (if specified) by defining
# b4_percent_code_skeleton_qualifiers(QUALIFIER).
m4_define([b4_percent_code_ifdef],
[m4_ifdef([b4_percent_code(]$1[)],
[m4_ifval([$1], [m4_define([b4_percent_code_skeleton_qualifiers(]$1[)])])$2],
[$3])])
## --------------------------------------------------------- ##
## After processing the skeletons, check that all the user's ##

View File

@@ -31,6 +31,7 @@ b4_percent_define_default([[parser_class_name]], [[parser]])
b4_percent_define_default([[location_type]], [[location]])
b4_percent_define_default([[filename_type]], [[std::string]])
b4_percent_define_default([[namespace]], m4_defn([b4_prefix]))
b4_percent_define_default([[global_tokens_and_yystype]], [[0]])
b4_percent_define_default([[define_location_comparison]],
[m4_if(b4_percent_define_get([[filename_type]]),
[std::string], [[1]], [[0]])])

View File

@@ -366,7 +366,7 @@ b4_user_stype
};
]dnl Redirections for glr.c.
m4_ifval(b4_percent_define_get([[global_tokens_and_yystype]]),
b4_percent_define_flag_if([[global_tokens_and_yystype]],
[b4_token_defines(b4_tokens)])
[
#ifndef YYSTYPE

View File

@@ -290,7 +290,7 @@ b4_error_verbose_if([, int tok])[);
};
}
]m4_ifval(b4_percent_define_get([[global_tokens_and_yystype]]),
]b4_percent_define_flag_if([[global_tokens_and_yystype]],
[b4_token_defines(b4_tokens)
#ifndef YYSTYPE

View File

@@ -114,7 +114,7 @@ namespace ]b4_percent_define_get([[namespace]])[
{
return begin + -width;
}
]m4_if(b4_percent_define_get([[define_location_comparison]]), [1], [[
]b4_percent_define_flag_if([[define_location_comparison]], [[
/// Compare two position objects.
inline bool
operator== (const position& pos1, const position& pos2)
@@ -236,7 +236,7 @@ namespace ]b4_percent_define_get([[namespace]])[
res.columns (width);
return res;
}
]m4_if(b4_percent_define_get([[define_location_comparison]]), [1], [[
]b4_percent_define_flag_if([[define_location_comparison]], [[
/// Compare two location objects.
inline bool
operator== (const location& loc1, const location& loc2)

View File

@@ -4615,6 +4615,15 @@ header also contains their code.
@xref{Table of Symbols, ,%code}.
@end deffn
@deffn {Directive} %define @var{define-variable}
@deffnx {Directive} %define @var{define-variable} @var{value}
Define a variable to be used by the skeleton in order to adjust its
behavior. The @var{value} can be omitted for boolean variables; for
boolean variables, the skeletons will treat a @var{value} of @samp{0}
or @samp{false} as the boolean variable being false, and anything else
as true.
@end deffn
@deffn {Directive} %defines @var{defines-file}
Same as above, but save in the file @var{defines-file}.
@end deffn

View File

@@ -78,7 +78,7 @@
/* Copy the first part of user declarations. */
/* Line 1537 of yacc.c */
#line 1 "parse-gram.y"
#line 1 "../../src/parse-gram.y"
/* Bison Grammar Parser -*- C -*-
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation,
@@ -158,7 +158,7 @@ static int current_prec = 0;
/* Line 1537 of yacc.c */
#line 162 "parse-gram.c"
#line 162 "../../src/parse-gram.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -311,7 +311,7 @@ typedef union YYSTYPE
{
/* Line 1537 of yacc.c */
#line 97 "parse-gram.y"
#line 97 "../../src/parse-gram.y"
symbol *symbol;
symbol_list *list;
@@ -325,7 +325,7 @@ typedef union YYSTYPE
/* Line 1537 of yacc.c */
#line 329 "parse-gram.c"
#line 329 "../../src/parse-gram.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -350,7 +350,7 @@ typedef struct YYLTYPE
/* Line 1537 of yacc.c */
#line 354 "parse-gram.c"
#line 354 "../../src/parse-gram.c"
#ifdef short
# undef short
@@ -684,8 +684,8 @@ static const yytype_uint16 yyrline[] =
441, 443, 448, 449, 453, 454, 455, 456, 461, 466,
471, 477, 483, 494, 495, 504, 505, 511, 512, 513,
520, 520, 524, 525, 526, 531, 532, 534, 536, 538,
540, 550, 551, 557, 561, 570, 590, 592, 601, 606,
607, 612, 619, 621
540, 550, 551, 557, 560, 569, 589, 591, 600, 605,
606, 611, 618, 620
};
#endif
@@ -1041,146 +1041,146 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp)
case 3: /* "\"string\"" */
/* Line 1537 of yacc.c */
#line 188 "parse-gram.y"
#line 188 "../../src/parse-gram.y"
{ fputs (quotearg_style (c_quoting_style, (yyvaluep->chars)), stderr); };
/* Line 1537 of yacc.c */
#line 1049 "parse-gram.c"
#line 1049 "../../src/parse-gram.c"
break;
case 4: /* "\"integer\"" */
/* Line 1537 of yacc.c */
#line 199 "parse-gram.y"
#line 199 "../../src/parse-gram.y"
{ fprintf (stderr, "%d", (yyvaluep->integer)); };
/* Line 1537 of yacc.c */
#line 1058 "parse-gram.c"
#line 1058 "../../src/parse-gram.c"
break;
case 45: /* "\"{...}\"" */
/* Line 1537 of yacc.c */
#line 190 "parse-gram.y"
#line 190 "../../src/parse-gram.y"
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->code)); };
/* Line 1537 of yacc.c */
#line 1067 "parse-gram.c"
#line 1067 "../../src/parse-gram.c"
break;
case 46: /* "\"char\"" */
/* Line 1537 of yacc.c */
#line 182 "parse-gram.y"
#line 182 "../../src/parse-gram.y"
{ fputs (char_name ((yyvaluep->character)), stderr); };
/* Line 1537 of yacc.c */
#line 1076 "parse-gram.c"
#line 1076 "../../src/parse-gram.c"
break;
case 47: /* "\"epilogue\"" */
/* Line 1537 of yacc.c */
#line 190 "parse-gram.y"
#line 190 "../../src/parse-gram.y"
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 1537 of yacc.c */
#line 1085 "parse-gram.c"
#line 1085 "../../src/parse-gram.c"
break;
case 49: /* "\"identifier\"" */
/* Line 1537 of yacc.c */
#line 195 "parse-gram.y"
#line 195 "../../src/parse-gram.y"
{ fputs ((yyvaluep->uniqstr), stderr); };
/* Line 1537 of yacc.c */
#line 1094 "parse-gram.c"
#line 1094 "../../src/parse-gram.c"
break;
case 50: /* "\"identifier:\"" */
/* Line 1537 of yacc.c */
#line 196 "parse-gram.y"
#line 196 "../../src/parse-gram.y"
{ fprintf (stderr, "%s:", (yyvaluep->uniqstr)); };
/* Line 1537 of yacc.c */
#line 1103 "parse-gram.c"
#line 1103 "../../src/parse-gram.c"
break;
case 53: /* "\"%{...%}\"" */
/* Line 1537 of yacc.c */
#line 190 "parse-gram.y"
#line 190 "../../src/parse-gram.y"
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 1537 of yacc.c */
#line 1112 "parse-gram.c"
#line 1112 "../../src/parse-gram.c"
break;
case 55: /* "\"type\"" */
/* Line 1537 of yacc.c */
#line 194 "parse-gram.y"
#line 194 "../../src/parse-gram.y"
{ fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
/* Line 1537 of yacc.c */
#line 1121 "parse-gram.c"
#line 1121 "../../src/parse-gram.c"
break;
case 82: /* "variable" */
/* Line 1537 of yacc.c */
#line 195 "parse-gram.y"
#line 195 "../../src/parse-gram.y"
{ fputs ((yyvaluep->uniqstr), stderr); };
/* Line 1537 of yacc.c */
#line 1130 "parse-gram.c"
#line 1130 "../../src/parse-gram.c"
break;
case 83: /* "content.opt" */
/* Line 1537 of yacc.c */
#line 190 "parse-gram.y"
#line 190 "../../src/parse-gram.y"
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 1537 of yacc.c */
#line 1139 "parse-gram.c"
#line 1139 "../../src/parse-gram.c"
break;
case 84: /* "braceless" */
/* Line 1537 of yacc.c */
#line 190 "parse-gram.y"
#line 190 "../../src/parse-gram.y"
{ fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
/* Line 1537 of yacc.c */
#line 1148 "parse-gram.c"
#line 1148 "../../src/parse-gram.c"
break;
case 85: /* "id" */
/* Line 1537 of yacc.c */
#line 202 "parse-gram.y"
#line 202 "../../src/parse-gram.y"
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 1537 of yacc.c */
#line 1157 "parse-gram.c"
#line 1157 "../../src/parse-gram.c"
break;
case 86: /* "id_colon" */
/* Line 1537 of yacc.c */
#line 203 "parse-gram.y"
#line 203 "../../src/parse-gram.y"
{ fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
/* Line 1537 of yacc.c */
#line 1166 "parse-gram.c"
#line 1166 "../../src/parse-gram.c"
break;
case 87: /* "symbol" */
/* Line 1537 of yacc.c */
#line 202 "parse-gram.y"
#line 202 "../../src/parse-gram.y"
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 1537 of yacc.c */
#line 1175 "parse-gram.c"
#line 1175 "../../src/parse-gram.c"
break;
case 88: /* "string_as_id" */
/* Line 1537 of yacc.c */
#line 202 "parse-gram.y"
#line 202 "../../src/parse-gram.y"
{ fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
/* Line 1537 of yacc.c */
#line 1184 "parse-gram.c"
#line 1184 "../../src/parse-gram.c"
break;
default:
break;
@@ -1695,7 +1695,7 @@ YYLTYPE yylloc;
/* User initialization code. */
/* Line 1537 of yacc.c */
#line 89 "parse-gram.y"
#line 89 "../../src/parse-gram.y"
{
/* Bison's grammar can initial empty locations, hence a default
location is needed. */
@@ -1704,7 +1704,7 @@ YYLTYPE yylloc;
}
/* Line 1537 of yacc.c */
#line 1708 "parse-gram.c"
#line 1708 "../../src/parse-gram.c"
yylsp[0] = yylloc;
goto yysetstate;
@@ -1890,7 +1890,7 @@ yyreduce:
case 6:
/* Line 1537 of yacc.c */
#line 226 "parse-gram.y"
#line 226 "../../src/parse-gram.y"
{
code_props plain_code;
code_props_plain_init (&plain_code, (yyvsp[(1) - (1)].chars), (yylsp[(1) - (1)]));
@@ -1905,14 +1905,14 @@ yyreduce:
case 7:
/* Line 1537 of yacc.c */
#line 235 "parse-gram.y"
#line 235 "../../src/parse-gram.y"
{ debug_flag = true; }
break;
case 8:
/* Line 1537 of yacc.c */
#line 237 "parse-gram.y"
#line 237 "../../src/parse-gram.y"
{
char const name_prefix[] = "percent_define(";
size_t length = strlen ((yyvsp[(2) - (3)].uniqstr));
@@ -1931,14 +1931,14 @@ yyreduce:
case 9:
/* Line 1537 of yacc.c */
#line 250 "parse-gram.y"
#line 250 "../../src/parse-gram.y"
{ defines_flag = true; }
break;
case 10:
/* Line 1537 of yacc.c */
#line 252 "parse-gram.y"
#line 252 "../../src/parse-gram.y"
{
defines_flag = true;
spec_defines_file = xstrdup ((yyvsp[(2) - (2)].chars));
@@ -1948,42 +1948,42 @@ yyreduce:
case 11:
/* Line 1537 of yacc.c */
#line 256 "parse-gram.y"
#line 256 "../../src/parse-gram.y"
{ error_verbose = true; }
break;
case 12:
/* Line 1537 of yacc.c */
#line 257 "parse-gram.y"
#line 257 "../../src/parse-gram.y"
{ expected_sr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 13:
/* Line 1537 of yacc.c */
#line 258 "parse-gram.y"
#line 258 "../../src/parse-gram.y"
{ expected_rr_conflicts = (yyvsp[(2) - (2)].integer); }
break;
case 14:
/* Line 1537 of yacc.c */
#line 259 "parse-gram.y"
#line 259 "../../src/parse-gram.y"
{ spec_file_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 15:
/* Line 1537 of yacc.c */
#line 260 "parse-gram.y"
#line 260 "../../src/parse-gram.y"
{ spec_file_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 16:
/* Line 1537 of yacc.c */
#line 262 "parse-gram.y"
#line 262 "../../src/parse-gram.y"
{
nondeterministic_parser = true;
glr_parser = true;
@@ -1993,7 +1993,7 @@ yyreduce:
case 17:
/* Line 1537 of yacc.c */
#line 267 "parse-gram.y"
#line 267 "../../src/parse-gram.y"
{
code_props action;
code_props_symbol_action_init (&action, (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)]));
@@ -2007,105 +2007,105 @@ yyreduce:
case 18:
/* Line 1537 of yacc.c */
#line 275 "parse-gram.y"
#line 275 "../../src/parse-gram.y"
{ language_argmatch ((yyvsp[(2) - (2)].chars), 1, &(yylsp[(1) - (2)])); }
break;
case 19:
/* Line 1537 of yacc.c */
#line 276 "parse-gram.y"
#line 276 "../../src/parse-gram.y"
{ add_param ("lex_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 20:
/* Line 1537 of yacc.c */
#line 277 "parse-gram.y"
#line 277 "../../src/parse-gram.y"
{ locations_flag = true; }
break;
case 21:
/* Line 1537 of yacc.c */
#line 278 "parse-gram.y"
#line 278 "../../src/parse-gram.y"
{ spec_name_prefix = (yyvsp[(2) - (2)].chars); }
break;
case 22:
/* Line 1537 of yacc.c */
#line 279 "parse-gram.y"
#line 279 "../../src/parse-gram.y"
{ spec_name_prefix = (yyvsp[(3) - (3)].chars); }
break;
case 23:
/* Line 1537 of yacc.c */
#line 280 "parse-gram.y"
#line 280 "../../src/parse-gram.y"
{ no_lines_flag = true; }
break;
case 24:
/* Line 1537 of yacc.c */
#line 281 "parse-gram.y"
#line 281 "../../src/parse-gram.y"
{ nondeterministic_parser = true; }
break;
case 25:
/* Line 1537 of yacc.c */
#line 282 "parse-gram.y"
#line 282 "../../src/parse-gram.y"
{ spec_outfile = (yyvsp[(2) - (2)].chars); }
break;
case 26:
/* Line 1537 of yacc.c */
#line 283 "parse-gram.y"
#line 283 "../../src/parse-gram.y"
{ spec_outfile = (yyvsp[(3) - (3)].chars); }
break;
case 27:
/* Line 1537 of yacc.c */
#line 284 "parse-gram.y"
#line 284 "../../src/parse-gram.y"
{ add_param ("parse_param", (yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 28:
/* Line 1537 of yacc.c */
#line 285 "parse-gram.y"
#line 285 "../../src/parse-gram.y"
{ pure_parser = true; }
break;
case 29:
/* Line 1537 of yacc.c */
#line 286 "parse-gram.y"
#line 286 "../../src/parse-gram.y"
{ push_parser = true; pull_parser = false; }
break;
case 30:
/* Line 1537 of yacc.c */
#line 287 "parse-gram.y"
#line 287 "../../src/parse-gram.y"
{ push_parser = true; pull_parser = true; }
break;
case 31:
/* Line 1537 of yacc.c */
#line 288 "parse-gram.y"
#line 288 "../../src/parse-gram.y"
{ version_check (&(yylsp[(2) - (2)]), (yyvsp[(2) - (2)].chars)); }
break;
case 32:
/* Line 1537 of yacc.c */
#line 290 "parse-gram.y"
#line 290 "../../src/parse-gram.y"
{
char const *skeleton_user = (yyvsp[(2) - (2)].chars);
if (strchr (skeleton_user, '/'))
@@ -2134,28 +2134,28 @@ yyreduce:
case 33:
/* Line 1537 of yacc.c */
#line 313 "parse-gram.y"
#line 313 "../../src/parse-gram.y"
{ token_table_flag = true; }
break;
case 34:
/* Line 1537 of yacc.c */
#line 314 "parse-gram.y"
#line 314 "../../src/parse-gram.y"
{ report_flag = report_states; }
break;
case 35:
/* Line 1537 of yacc.c */
#line 315 "parse-gram.y"
#line 315 "../../src/parse-gram.y"
{ yacc_flag = true; }
break;
case 39:
/* Line 1537 of yacc.c */
#line 323 "parse-gram.y"
#line 323 "../../src/parse-gram.y"
{
grammar_start_symbol_set ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]));
}
@@ -2164,7 +2164,7 @@ yyreduce:
case 40:
/* Line 1537 of yacc.c */
#line 327 "parse-gram.y"
#line 327 "../../src/parse-gram.y"
{
symbol_list *list;
for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
@@ -2176,7 +2176,7 @@ yyreduce:
case 41:
/* Line 1537 of yacc.c */
#line 334 "parse-gram.y"
#line 334 "../../src/parse-gram.y"
{
symbol_list *list;
for (list = (yyvsp[(3) - (3)].list); list; list = list->next)
@@ -2188,7 +2188,7 @@ yyreduce:
case 42:
/* Line 1537 of yacc.c */
#line 341 "parse-gram.y"
#line 341 "../../src/parse-gram.y"
{
default_prec = true;
}
@@ -2197,7 +2197,7 @@ yyreduce:
case 43:
/* Line 1537 of yacc.c */
#line 345 "parse-gram.y"
#line 345 "../../src/parse-gram.y"
{
default_prec = false;
}
@@ -2206,9 +2206,9 @@ yyreduce:
case 44:
/* Line 1537 of yacc.c */
#line 349 "parse-gram.y"
#line 349 "../../src/parse-gram.y"
{
muscle_code_grow ("percent_code_unqualified", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
muscle_code_grow ("percent_code()", (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
code_scanner_last_string_free ();
}
break;
@@ -2216,7 +2216,7 @@ yyreduce:
case 45:
/* Line 1537 of yacc.c */
#line 354 "parse-gram.y"
#line 354 "../../src/parse-gram.y"
{
char const name_prefix[] = "percent_code(";
size_t length = strlen ((yyvsp[(2) - (3)].uniqstr));
@@ -2234,21 +2234,21 @@ yyreduce:
case 46:
/* Line 1537 of yacc.c */
#line 376 "parse-gram.y"
#line 376 "../../src/parse-gram.y"
{}
break;
case 47:
/* Line 1537 of yacc.c */
#line 377 "parse-gram.y"
#line 377 "../../src/parse-gram.y"
{ muscle_code_grow ("union_name", (yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 48:
/* Line 1537 of yacc.c */
#line 382 "parse-gram.y"
#line 382 "../../src/parse-gram.y"
{
union_seen = true;
muscle_code_grow ("stype", (yyvsp[(3) - (3)].chars), (yylsp[(3) - (3)]));
@@ -2259,14 +2259,14 @@ yyreduce:
case 49:
/* Line 1537 of yacc.c */
#line 393 "parse-gram.y"
#line 393 "../../src/parse-gram.y"
{ current_class = nterm_sym; }
break;
case 50:
/* Line 1537 of yacc.c */
#line 394 "parse-gram.y"
#line 394 "../../src/parse-gram.y"
{
current_class = unknown_sym;
current_type = NULL;
@@ -2276,14 +2276,14 @@ yyreduce:
case 51:
/* Line 1537 of yacc.c */
#line 398 "parse-gram.y"
#line 398 "../../src/parse-gram.y"
{ current_class = token_sym; }
break;
case 52:
/* Line 1537 of yacc.c */
#line 399 "parse-gram.y"
#line 399 "../../src/parse-gram.y"
{
current_class = unknown_sym;
current_type = NULL;
@@ -2293,7 +2293,7 @@ yyreduce:
case 53:
/* Line 1537 of yacc.c */
#line 404 "parse-gram.y"
#line 404 "../../src/parse-gram.y"
{
symbol_list *list;
tag_seen = true;
@@ -2306,7 +2306,7 @@ yyreduce:
case 54:
/* Line 1537 of yacc.c */
#line 415 "parse-gram.y"
#line 415 "../../src/parse-gram.y"
{
symbol_list *list;
++current_prec;
@@ -2323,98 +2323,98 @@ yyreduce:
case 55:
/* Line 1537 of yacc.c */
#line 429 "parse-gram.y"
#line 429 "../../src/parse-gram.y"
{ (yyval.assoc) = left_assoc; }
break;
case 56:
/* Line 1537 of yacc.c */
#line 430 "parse-gram.y"
#line 430 "../../src/parse-gram.y"
{ (yyval.assoc) = right_assoc; }
break;
case 57:
/* Line 1537 of yacc.c */
#line 431 "parse-gram.y"
#line 431 "../../src/parse-gram.y"
{ (yyval.assoc) = non_assoc; }
break;
case 58:
/* Line 1537 of yacc.c */
#line 435 "parse-gram.y"
#line 435 "../../src/parse-gram.y"
{ current_type = NULL; }
break;
case 59:
/* Line 1537 of yacc.c */
#line 436 "parse-gram.y"
#line 436 "../../src/parse-gram.y"
{ current_type = (yyvsp[(1) - (1)].uniqstr); tag_seen = true; }
break;
case 60:
/* Line 1537 of yacc.c */
#line 442 "parse-gram.y"
#line 442 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 61:
/* Line 1537 of yacc.c */
#line 444 "parse-gram.y"
#line 444 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), symbol_list_sym_new ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)]))); }
break;
case 62:
/* Line 1537 of yacc.c */
#line 448 "parse-gram.y"
#line 448 "../../src/parse-gram.y"
{ (yyval.list) = (yyvsp[(1) - (1)].list); }
break;
case 63:
/* Line 1537 of yacc.c */
#line 449 "parse-gram.y"
#line 449 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_prepend ((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); }
break;
case 64:
/* Line 1537 of yacc.c */
#line 453 "parse-gram.y"
#line 453 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_sym_new ((yyvsp[(1) - (1)].symbol), (yylsp[(1) - (1)])); }
break;
case 65:
/* Line 1537 of yacc.c */
#line 454 "parse-gram.y"
#line 454 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_type_new ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 66:
/* Line 1537 of yacc.c */
#line 455 "parse-gram.y"
#line 455 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_default_tagged_new ((yylsp[(1) - (1)])); }
break;
case 67:
/* Line 1537 of yacc.c */
#line 456 "parse-gram.y"
#line 456 "../../src/parse-gram.y"
{ (yyval.list) = symbol_list_default_tagless_new ((yylsp[(1) - (1)])); }
break;
case 68:
/* Line 1537 of yacc.c */
#line 462 "parse-gram.y"
#line 462 "../../src/parse-gram.y"
{
current_type = (yyvsp[(1) - (1)].uniqstr);
tag_seen = true;
@@ -2424,7 +2424,7 @@ yyreduce:
case 69:
/* Line 1537 of yacc.c */
#line 467 "parse-gram.y"
#line 467 "../../src/parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (1)].symbol), current_class, (yylsp[(1) - (1)]), true);
symbol_type_set ((yyvsp[(1) - (1)].symbol), current_type, (yylsp[(1) - (1)]));
@@ -2434,7 +2434,7 @@ yyreduce:
case 70:
/* Line 1537 of yacc.c */
#line 472 "parse-gram.y"
#line 472 "../../src/parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
@@ -2445,7 +2445,7 @@ yyreduce:
case 71:
/* Line 1537 of yacc.c */
#line 478 "parse-gram.y"
#line 478 "../../src/parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (2)].symbol), current_class, (yylsp[(1) - (2)]), true);
symbol_type_set ((yyvsp[(1) - (2)].symbol), current_type, (yylsp[(1) - (2)]));
@@ -2456,7 +2456,7 @@ yyreduce:
case 72:
/* Line 1537 of yacc.c */
#line 484 "parse-gram.y"
#line 484 "../../src/parse-gram.y"
{
symbol_class_set ((yyvsp[(1) - (3)].symbol), current_class, (yylsp[(1) - (3)]), true);
symbol_type_set ((yyvsp[(1) - (3)].symbol), current_type, (yylsp[(1) - (3)]));
@@ -2468,7 +2468,7 @@ yyreduce:
case 79:
/* Line 1537 of yacc.c */
#line 514 "parse-gram.y"
#line 514 "../../src/parse-gram.y"
{
yyerrok;
}
@@ -2477,87 +2477,86 @@ yyreduce:
case 80:
/* Line 1537 of yacc.c */
#line 520 "parse-gram.y"
#line 520 "../../src/parse-gram.y"
{ current_lhs = (yyvsp[(1) - (1)].symbol); current_lhs_location = (yylsp[(1) - (1)]); }
break;
case 82:
/* Line 1537 of yacc.c */
#line 524 "parse-gram.y"
#line 524 "../../src/parse-gram.y"
{ grammar_current_rule_end ((yylsp[(1) - (1)])); }
break;
case 83:
/* Line 1537 of yacc.c */
#line 525 "parse-gram.y"
#line 525 "../../src/parse-gram.y"
{ grammar_current_rule_end ((yylsp[(3) - (3)])); }
break;
case 85:
/* Line 1537 of yacc.c */
#line 531 "parse-gram.y"
#line 531 "../../src/parse-gram.y"
{ grammar_current_rule_begin (current_lhs, current_lhs_location); }
break;
case 86:
/* Line 1537 of yacc.c */
#line 533 "parse-gram.y"
#line 533 "../../src/parse-gram.y"
{ grammar_current_rule_symbol_append ((yyvsp[(2) - (2)].symbol), (yylsp[(2) - (2)])); }
break;
case 87:
/* Line 1537 of yacc.c */
#line 535 "parse-gram.y"
#line 535 "../../src/parse-gram.y"
{ grammar_current_rule_action_append ((yyvsp[(2) - (2)].code), (yylsp[(2) - (2)])); }
break;
case 88:
/* Line 1537 of yacc.c */
#line 537 "parse-gram.y"
#line 537 "../../src/parse-gram.y"
{ grammar_current_rule_prec_set ((yyvsp[(3) - (3)].symbol), (yylsp[(3) - (3)])); }
break;
case 89:
/* Line 1537 of yacc.c */
#line 539 "parse-gram.y"
#line 539 "../../src/parse-gram.y"
{ grammar_current_rule_dprec_set ((yyvsp[(3) - (3)].integer), (yylsp[(3) - (3)])); }
break;
case 90:
/* Line 1537 of yacc.c */
#line 541 "parse-gram.y"
#line 541 "../../src/parse-gram.y"
{ grammar_current_rule_merge_set ((yyvsp[(3) - (3)].uniqstr), (yylsp[(3) - (3)])); }
break;
case 92:
/* Line 1537 of yacc.c */
#line 551 "parse-gram.y"
#line 551 "../../src/parse-gram.y"
{ (yyval.uniqstr) = uniqstr_new ((yyvsp[(1) - (1)].chars)); }
break;
case 93:
/* Line 1537 of yacc.c */
#line 557 "parse-gram.y"
#line 557 "../../src/parse-gram.y"
{
static char one[] = "1";
(yyval.chars) = one;
(yyval.chars) = "";
}
break;
case 95:
/* Line 1537 of yacc.c */
#line 571 "parse-gram.y"
#line 570 "../../src/parse-gram.y"
{
code_props plain_code;
(yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n';
@@ -2571,14 +2570,14 @@ yyreduce:
case 96:
/* Line 1537 of yacc.c */
#line 591 "parse-gram.y"
#line 590 "../../src/parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 97:
/* Line 1537 of yacc.c */
#line 593 "parse-gram.y"
#line 592 "../../src/parse-gram.y"
{
(yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
@@ -2589,14 +2588,14 @@ yyreduce:
case 98:
/* Line 1537 of yacc.c */
#line 601 "parse-gram.y"
#line 600 "../../src/parse-gram.y"
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
break;
case 101:
/* Line 1537 of yacc.c */
#line 613 "parse-gram.y"
#line 612 "../../src/parse-gram.y"
{
(yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
@@ -2606,7 +2605,7 @@ yyreduce:
case 103:
/* Line 1537 of yacc.c */
#line 622 "parse-gram.y"
#line 621 "../../src/parse-gram.y"
{
code_props plain_code;
code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
@@ -2620,7 +2619,7 @@ yyreduce:
/* Line 1537 of yacc.c */
#line 2624 "parse-gram.c"
#line 2623 "../../src/parse-gram.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2839,7 +2838,7 @@ yyreturn:
/* Line 1537 of yacc.c */
#line 632 "parse-gram.y"
#line 631 "../../src/parse-gram.y"

View File

@@ -167,7 +167,7 @@ typedef union YYSTYPE
{
/* Line 1537 of yacc.c */
#line 97 "parse-gram.y"
#line 97 "../../src/parse-gram.y"
symbol *symbol;
symbol_list *list;
@@ -181,7 +181,7 @@ typedef union YYSTYPE
/* Line 1537 of yacc.c */
#line 185 "parse-gram.h"
#line 185 "../../src/parse-gram.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */

View File

@@ -347,7 +347,7 @@ grammar_declaration:
}
| "%code" braceless
{
muscle_code_grow ("percent_code_unqualified", $2, @2);
muscle_code_grow ("percent_code()", $2, @2);
code_scanner_last_string_free ();
}
| "%code" ID braceless
@@ -551,12 +551,11 @@ variable:
| STRING { $$ = uniqstr_new ($1); } /* deprecated and not M4-friendly */
;
/* Some content or "1" by default. */
/* Some content or empty by default. */
content.opt:
/* Nothing. */
{
static char one[] = "1";
$$ = one;
$$ = "";
}
| STRING
;