mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
%parse-param support for lalr1.cc.
* data/lalr1.cc (b4_parse_param_decl, b4_parse_param_cons, b4_cc_constructor_calls, b4_cc_constructor_call, b4_parse_param_vars, b4_cc_var_decls, b4_cc_var_decl): New m4 definitions. (yy::b4_parser_class_name::b4_parser_class_name): Take extra parse-param arguments. (yy::b4_parser_class_name): Declare instance variables to hold parse-param arguments. * tests/calc.at: s/value/semantic_value/ because value clashes with a member of yy::b4_parser_class_name. Adjust C++ code to handle %parse-param. Enable %parse-param test in C++.
This commit is contained in:
16
ChangeLog
16
ChangeLog
@@ -1,3 +1,19 @@
|
|||||||
|
2003-05-14 Alexandre Duret-Lutz <adl@gnu.org>
|
||||||
|
|
||||||
|
%parse-param support for lalr1.cc.
|
||||||
|
|
||||||
|
* data/lalr1.cc (b4_parse_param_decl, b4_parse_param_cons,
|
||||||
|
b4_cc_constructor_calls, b4_cc_constructor_call,
|
||||||
|
b4_parse_param_vars, b4_cc_var_decls, b4_cc_var_decl): New m4
|
||||||
|
definitions.
|
||||||
|
(yy::b4_parser_class_name::b4_parser_class_name): Take extra
|
||||||
|
parse-param arguments.
|
||||||
|
(yy::b4_parser_class_name): Declare instance variables to
|
||||||
|
hold parse-param arguments.
|
||||||
|
* tests/calc.at: s/value/semantic_value/ because value clashes
|
||||||
|
with a member of yy::b4_parser_class_name. Adjust C++ code
|
||||||
|
to handle %parse-param. Enable %parse-param test in C++.
|
||||||
|
|
||||||
2003-05-12 Paul Eggert <eggert@twinsun.com>
|
2003-05-12 Paul Eggert <eggert@twinsun.com>
|
||||||
|
|
||||||
* doc/bison.texinfo (How Can I Reset @code{yyparse}): Reword the
|
* doc/bison.texinfo (How Can I Reset @code{yyparse}): Reword the
|
||||||
|
|||||||
@@ -81,6 +81,39 @@ m4_define([b4_constructor],
|
|||||||
[])])
|
[])])
|
||||||
|
|
||||||
|
|
||||||
|
# b4_parse_param_decl
|
||||||
|
# -------------------
|
||||||
|
# Constructor's extra arguments.
|
||||||
|
m4_define([b4_parse_param_decl],
|
||||||
|
[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
|
||||||
|
|
||||||
|
# b4_parse_param_cons
|
||||||
|
# -------------------
|
||||||
|
# constructor's extra initialisations.
|
||||||
|
m4_define([b4_parse_param_cons],
|
||||||
|
[m4_ifset([b4_parse_param],
|
||||||
|
[,
|
||||||
|
b4_cc_constructor_calls(b4_parse_param)])])
|
||||||
|
m4_define([b4_cc_constructor_calls],
|
||||||
|
[m4_map_sep([b4_cc_constructor_call], [,
|
||||||
|
], [$@])])
|
||||||
|
m4_define([b4_cc_constructor_call],
|
||||||
|
[$2($2)])
|
||||||
|
|
||||||
|
# b4_parse_param_vars
|
||||||
|
# -------------------
|
||||||
|
# Extra instance variables.
|
||||||
|
m4_define([b4_parse_param_vars],
|
||||||
|
[m4_ifset([b4_parse_param],
|
||||||
|
[
|
||||||
|
/* User arguments. */
|
||||||
|
b4_cc_var_decls(b4_parse_param)])])
|
||||||
|
m4_define([b4_cc_var_decls],
|
||||||
|
[m4_map_sep([b4_cc_var_decl], [
|
||||||
|
], [$@])])
|
||||||
|
m4_define([b4_cc_var_decl],
|
||||||
|
[ $1;])
|
||||||
|
|
||||||
# We do want M4 expansion after # for CPP macros.
|
# We do want M4 expansion after # for CPP macros.
|
||||||
m4_changecom()
|
m4_changecom()
|
||||||
m4_divert(0)dnl
|
m4_divert(0)dnl
|
||||||
@@ -178,14 +211,14 @@ namespace yy
|
|||||||
|
|
||||||
#if YYLSP_NEEDED
|
#if YYLSP_NEEDED
|
||||||
]b4_parser_class_name[ (bool debug,
|
]b4_parser_class_name[ (bool debug,
|
||||||
LocationType initlocation][]b4_param[) :
|
LocationType initlocation][]b4_param[]b4_parse_param_decl[) :
|
||||||
]b4_constructor[][debug_ (debug),
|
]b4_constructor[][debug_ (debug),
|
||||||
cdebug_ (std::cerr),
|
cdebug_ (std::cerr),
|
||||||
initlocation_ (initlocation)
|
initlocation_ (initlocation)]b4_parse_param_cons[
|
||||||
#else
|
#else
|
||||||
]b4_parser_class_name[ (bool debug][]b4_param[) :
|
]b4_parser_class_name[ (bool debug][]b4_param[]b4_parse_param_decl[) :
|
||||||
]b4_constructor[][debug_ (debug),
|
]b4_constructor[][debug_ (debug),
|
||||||
cdebug_ (std::cerr)
|
cdebug_ (std::cerr)]b4_parse_param_cons[
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -274,6 +307,7 @@ namespace yy
|
|||||||
|
|
||||||
/* Initial location. */
|
/* Initial location. */
|
||||||
LocationType initlocation_;
|
LocationType initlocation_;
|
||||||
|
]b4_parse_param_vars[
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,16 +50,16 @@ AT_DATA_GRAMMAR([calc.y],
|
|||||||
extern void perror (const char *s);
|
extern void perror (const char *s);
|
||||||
|
|
||||||
/* Exercise pre-prologue dependency to %union. */
|
/* Exercise pre-prologue dependency to %union. */
|
||||||
typedef int value;
|
typedef int semantic_value;
|
||||||
|
|
||||||
static value global_result = 0;
|
static semantic_value global_result = 0;
|
||||||
static int global_count = 0;
|
static int global_count = 0;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
/* Exercise %union. */
|
/* Exercise %union. */
|
||||||
%union
|
%union
|
||||||
{
|
{
|
||||||
value ival;
|
semantic_value ival;
|
||||||
};
|
};
|
||||||
|
|
||||||
%{
|
%{
|
||||||
@@ -69,7 +69,7 @@ static int power (int base, int exponent);
|
|||||||
- %location & %pure & %glr
|
- %location & %pure & %glr
|
||||||
- %location & %pure & %yacc & %parse-param. */
|
- %location & %pure & %yacc & %parse-param. */
|
||||||
static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
|
static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
|
||||||
AT_PARAM_IF([value *result, int *count, ])
|
AT_PARAM_IF([semantic_value *result, int *count, ])
|
||||||
const char *s
|
const char *s
|
||||||
);])[
|
);])[
|
||||||
static int yylex (]AT_LEX_FORMALS[);
|
static int yylex (]AT_LEX_FORMALS[);
|
||||||
@@ -139,15 +139,15 @@ yy::Parser::error_ ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
yyparse (void)
|
yyparse (AT_PARAM_IF([semantic_value *result, int *count]))
|
||||||
{
|
{
|
||||||
yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()]));
|
yy::Parser parser (!!YYDEBUG[]AT_LOCATION_IF([, yy::Location::Location ()])AT_PARAM_IF([, result, count]));
|
||||||
return parser.parse ();
|
return parser.parse ();
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
[static void
|
[static void
|
||||||
yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
|
yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
|
||||||
AT_PARAM_IF([value *result, int *count, ])
|
AT_PARAM_IF([semantic_value *result, int *count, ])
|
||||||
const char *s)
|
const char *s)
|
||||||
{
|
{
|
||||||
AT_PARAM_IF([(void) result; (void) count;])
|
AT_PARAM_IF([(void) result; (void) count;])
|
||||||
@@ -299,7 +299,7 @@ power (int base, int exponent)
|
|||||||
int
|
int
|
||||||
main (int argc, const char **argv)
|
main (int argc, const char **argv)
|
||||||
{
|
{
|
||||||
value result = 0;
|
semantic_value result = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@@ -546,7 +546,7 @@ AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc
|
|||||||
|
|
||||||
AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
|
|
||||||
# ----------------------- #
|
# ----------------------- #
|
||||||
@@ -582,7 +582,7 @@ AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc"
|
|||||||
|
|
||||||
AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
||||||
|
|
||||||
AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------- #
|
# ----------------------------- #
|
||||||
@@ -594,7 +594,7 @@ AT_BANNER([[Simple LALR1 C++ Calculator.]])
|
|||||||
# AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
|
# AT_CHECK_CALC_LALR1_CC([BISON-OPTIONS])
|
||||||
# ---------------------------------------
|
# ---------------------------------------
|
||||||
# Start a testing chunk which compiles `calc' grammar with
|
# Start a testing chunk which compiles `calc' grammar with
|
||||||
# BISON-OPTIONS and %glr-parser, and performs several tests over the parser.
|
# the C++ skeleton, and performs several tests over the parser.
|
||||||
m4_define([AT_CHECK_CALC_LALR1_CC],
|
m4_define([AT_CHECK_CALC_LALR1_CC],
|
||||||
[AT_CHECK_CALC([%skeleton "lalr1.cc"] $@)])
|
[AT_CHECK_CALC([%skeleton "lalr1.cc"] $@)])
|
||||||
|
|
||||||
@@ -619,4 +619,4 @@ AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %locations %defines %name-prefix="
|
|||||||
|
|
||||||
AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
|
||||||
|
|
||||||
# AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}])
|
AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||||
|
|||||||
Reference in New Issue
Block a user