mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
Instead of using make_symbol<TOK_FOO>, generate make_FOO for each token type.
Using template buys us nothing, and makes it uselessly complex to construct a symbol. Besides, it could not be generalized to other languages, while make_FOO would work in C/Java etc. * data/lalr1.cc (b4_symbol_): New. (b4_symbol): Use it. (b4_symbol_constructor_declaration_) (b4_symbol_constructor_definition_): Instead of generating specializations of an overloaded template function, just generate several functions whose names are forged from the token names without the token.prefix. (b4_symbol_constructor_declarations): Generate them for all the symbols, not just by class of symbol type, now that instead of specializing a function template by the token, we generate a function named after the token. (b4_symbol_constructor_specialization_) (b4_symbol_constructor_specializations): Remove. * etc/bench.pl.in: Adjust to this new API.
This commit is contained in:
@@ -692,7 +692,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
|
||||
if (stage == STAGE_MAX)
|
||||
{
|
||||
#if USE_LEX_SYMBOL
|
||||
return yy::parser::make_symbol <token::END_OF_FILE> (yy::location());
|
||||
return yy::parser::make_END_OF_FILE (yy::location());
|
||||
#else
|
||||
*yylloc = yy::location ();
|
||||
return token::END_OF_FILE;
|
||||
@@ -701,7 +701,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
|
||||
else if (stage % 2)
|
||||
{
|
||||
#if USE_LEX_SYMBOL
|
||||
return yy::parser::make_symbol <token::NUMBER> (stage, yy::location());
|
||||
return yy::parser::make_NUMBER (stage, yy::location());
|
||||
#elif defined ONE_STAGE_BUILD
|
||||
yylval->build(stage);
|
||||
*yylloc = yy::location ();
|
||||
@@ -719,7 +719,7 @@ yy::parser::token_type yylex(yy::parser::semantic_type* yylval,
|
||||
else
|
||||
{
|
||||
#if USE_LEX_SYMBOL
|
||||
return yy::parser::make_symbol <token::TEXT> ("A string.", yy::location());
|
||||
return yy::parser::make_TEXT ("A string.", yy::location());
|
||||
#elif defined ONE_STAGE_BUILD
|
||||
yylval->build(std::string("A string."));
|
||||
*yylloc = yy::location ();
|
||||
|
||||
Reference in New Issue
Block a user