The YYLEX existed only to support YYLEX_PARAM, which is now removed.
This macro was a nuisance, since incorrect yylex calls where pointed
the macro _use_, instead of its definition.
* data/c.m4 (b4_lex_formals, b4_lex): New.
* data/glr.c, data/yacc.c: Use it.
* data/lalr1.cc (b4_lex): New.
Use it.
squash! skeletons: no longer call yylex via a CPP macro
## Pure/impure interfaces. ##
## ------------------------ ##
+# b4_lex_formals
+# --------------
+# All the yylex formal arguments.
+# b4_lex_param arrives quoted twice, but we want to keep only one level.
+m4_define([b4_lex_formals],
+[b4_pure_if([[[[YYSTYPE *yylvalp]], [[&yylval]]][]dnl
+b4_locations_if([, [[YYLTYPE *yyllocp], [&yylloc]]])])dnl
+m4_ifdef([b4_lex_param], [, ]b4_lex_param)])
+
+
+# b4_lex
+# ------
+# Call yylex.
+m4_define([b4_lex],
+[b4_function_call([yylex], [int], b4_lex_formals)])
+
+
# b4_user_args
# ------------
m4_define([b4_user_args],
[m4_ifset([b4_parse_param], [, b4_formals(b4_parse_param)])])
-# b4_lex_formals
-# --------------
-# All the yylex formal arguments.
-m4_define([b4_lex_formals],
-m4_dquote(b4_pure_if([[[[YYSTYPE *yylvalp]], [[&yylval]]][]dnl
-b4_locations_if([, [[YYLTYPE *yyllocp], [&yylloc]]])])dnl
-m4_ifdef([b4_lex_param], [, ]b4_lex_param)))
-
-
# b4_yyerror_args
# ---------------
# Optional effective arguments passed to yyerror: user args plus yylloc, and
]])[
]b4_yy_location_print_define[
-/* YYLEX -- calling `yylex' with the right arguments. */
-#ifndef YYLEX
-# define YYLEX ]b4_function_call([yylex], [int], b4_lex_formals)[
-#endif
-
]b4_pure_if(
[
#undef yynerrs
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = ]b4_lex[;
}
if (yychar <= YYEOF)
yytoken, &yylval]b4_locuser_args([&yylloc])[);
}
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = ]b4_lex[;
if (yychar <= YYEOF)
{
yychar = yytoken = YYEOF;
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = ]b4_lex[;
}
if (yychar <= YYEOF)
])])
+# b4_lex
+# ------
+# Call yylex.
+m4_define([b4_lex],
+[b4_token_ctor_if(
+[b4_function_call([yylex],
+ [symbol_type], m4_ifdef([b4_lex_param], b4_lex_param))],
+[b4_function_call([yylex], [int],
+ [b4_api_PREFIX[STYPE*], [&yyla.value]][]dnl
+b4_locations_if([, [[location*], [&yyla.location]]])dnl
+m4_ifdef([b4_lex_param], [, ]b4_lex_param))])])
+
+
m4_pushdef([b4_copyright_years],
[2002-2012])
{
YYCDEBUG << "Reading a token: ";
try
- {
-]b4_token_ctor_if(
-[ symbol_type yylookahead = b4_function_call([yylex], [symbol_type],
- m4_ifdef([b4_lex_param], b4_lex_param));
- yyla.move(yylookahead);],
-[ yyla.type = yytranslate_ (b4_function_call([yylex], [int],
- [b4_api_PREFIX[STYPE*], [&yyla.value]][]dnl
-b4_locations_if([, [[location*], [&yyla.location]]])dnl
-m4_ifdef([b4_lex_param], [, ]b4_lex_param)));])[
+ {]b4_token_ctor_if([[
+ symbol_type yylookahead = ]b4_lex[;
+ yyla.move (yylookahead);]], [[
+ yyla.type = yytranslate_ (]b4_lex[);]])[
}
catch (const syntax_error& yyexc)
{
m4_ifset([b4_parse_param], [b4_args(b4_parse_param), ])])
-# b4_lex_param
-# ------------
-# Accumulate in b4_lex_param all the yylex arguments.
-# b4_lex_param arrives quoted twice, but we want to keep only one level.
-m4_define([b4_lex_param],
-m4_dquote(b4_pure_if([[[[YYSTYPE *yylval]], [[&yylval]]][]dnl
-b4_locations_if([, [[YYLTYPE *yylloc], [&yylloc]]])m4_ifdef([b4_lex_param], [, ])])dnl
-m4_ifdef([b4_lex_param], b4_lex_param)))
-
## ------------ ##
## Data Types. ##
]])[
]b4_yy_location_print_define[
-/* YYLEX -- calling `yylex' with the right arguments. */
-#define YYLEX ]b4_function_call([yylex], [int], b4_lex_param)[
-
/* Enable debugging if requested. */
#if ]b4_api_PREFIX[DEBUG
}
}
do {
- yychar = YYLEX;
+ yychar = ]b4_lex[;
yystatus =
yypush_parse (yyps_local]b4_pure_if([[, yychar, &yylval]b4_locations_if([[, &yylloc]])])m4_ifset([b4_parse_param], [, b4_args(b4_parse_param)])[);
} while (yystatus == YYPUSH_MORE);
yylval = *yypushed_val;]b4_locations_if([[
if (yypushed_loc)
yylloc = *yypushed_loc;]])])], [[
- yychar = YYLEX;]])[
+ yychar = ]b4_lex[;]])[
}
if (yychar <= YYEOF)