Simplify code for variants bench marks.

* etc/bench.pl.in (&generate_grammar_list): Define and use
	location_type.
	Factor the common code in yylex.
This commit is contained in:
Akim Demaille
2008-10-10 16:56:00 +02:00
committed by Akim Demaille
parent 070e650956
commit 4fc55348e5
2 changed files with 23 additions and 19 deletions

View File

@@ -1,3 +1,10 @@
2008-11-15 Akim Demaille <akim@betelgeuse.gostai.ensta.fr>
Simplify code for variants bench marks.
* etc/bench.pl.in (&generate_grammar_list): Define and use
location_type.
Factor the common code in yylex.
2008-11-15 Akim Demaille <demaille@gostai.com>
Better error message.

View File

@@ -686,6 +686,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
yy::parser::location_type* yylloc)
#endif
{
typedef yy::parser::location_type location_type;
typedef yy::parser::token token;
static int stage = -1;
++stage;
@@ -694,7 +695,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
#if USE_LEX_SYMBOL
return yy::parser::make_END_OF_FILE (yy::location());
#else
*yylloc = yy::location ();
*yylloc = location_type ();
return token::END_OF_FILE;
#endif
}
@@ -702,17 +703,15 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
{
#if USE_LEX_SYMBOL
return yy::parser::make_NUMBER (stage, yy::location());
#elif defined ONE_STAGE_BUILD
yylval->build(stage);
*yylloc = yy::location ();
return token::NUMBER;
#elif USE_VARIANTS
yylval->build<int>() = stage;
*yylloc = yy::location ();
return token::NUMBER;
#else
# if defined ONE_STAGE_BUILD
yylval->build(stage);
# elif USE_VARIANTS
yylval->build<int>() = stage;
# else
yylval->ival = stage;
*yylloc = yy::location ();
# endif
*yylloc = location_type ();
return token::NUMBER;
#endif
}
@@ -720,17 +719,15 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
{
#if USE_LEX_SYMBOL
return yy::parser::make_TEXT ("A string.", yy::location());
#elif defined ONE_STAGE_BUILD
yylval->build(std::string("A string."));
*yylloc = yy::location ();
return token::TEXT;
#elif USE_VARIANTS
yylval->build<std::string>() = std::string("A string.");
*yylloc = yy::location ();
return token::TEXT;
#else
# if defined ONE_STAGE_BUILD
yylval->build(std::string("A string."));
# elif USE_VARIANTS
yylval->build<std::string>() = std::string("A string.");
# else
yylval->sval = new std::string("A string.");
*yylloc = yy::location ();
# endif
*yylloc = location_type ();
return token::TEXT;
#endif
}