mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
lalr1.cc: rename lex_symbol as api.token.constructor
* data/bison.m4 (b4_lex_symbol_if): Rename as... (b4_token_ctor_if): this. Depend upon api.token.constructor. * data/c++.m4, data/lalr1.cc: Adjust. * doc/bison.texi: Fix all the occurrences of lex_symbol. * etc/bench.pl.in: Adjust. * examples/variant.yy: Likewise. * tests/local.at (AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS): Handle AT_TOKEN_CTOR_IF. * tests/c++.at: Adjust to using api.token.constructor and AT_TOKEN_CTOR_IF. Simplify the test of both build call styles. (AT_CHECK_VARIANTS): Rename as... (AT_TEST): this. And undef when done.
This commit is contained in:
131
tests/c++.at
131
tests/c++.at
@@ -22,12 +22,13 @@ AT_BANNER([[C++ Features.]])
|
||||
## Variants. ##
|
||||
## ---------- ##
|
||||
|
||||
# AT_CHECK_VARIANTS([DIRECTIVES])
|
||||
# -------------------------------
|
||||
# AT_TEST([DIRECTIVES])
|
||||
# ---------------------
|
||||
# Check the support of variants in C++, with the additional DIRECTIVES.
|
||||
m4_define([AT_CHECK_VARIANTS],
|
||||
m4_pushdef([AT_TEST],
|
||||
[AT_SETUP([Variants $1])
|
||||
|
||||
AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc" $1])
|
||||
# Store strings and integers in a list of strings.
|
||||
AT_DATA_GRAMMAR([list.yy],
|
||||
[[%debug
|
||||
@@ -50,13 +51,13 @@ typedef std::list<std::string> strings_type;
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
static
|
||||
#if defined USE_LEX_SYMBOL
|
||||
yy::parser::symbol_type yylex ();
|
||||
#else
|
||||
yy::parser::token_type yylex (yy::parser::semantic_type* yylval,
|
||||
yy::parser::location_type* yylloc);
|
||||
#endif
|
||||
namespace yy
|
||||
{
|
||||
static]AT_TOKEN_CTOR_IF([[
|
||||
parser::symbol_type yylex ()]], [[
|
||||
parser::token_type yylex (parser::semantic_type* yylval,
|
||||
parser::location_type* yylloc)]])[;
|
||||
}
|
||||
|
||||
// Printing a list of strings (for %printer).
|
||||
// Koening look up will look into std, since that's an std::list.
|
||||
@@ -118,66 +119,51 @@ item:
|
||||
;
|
||||
%%
|
||||
|
||||
#define STAGE_MAX 5
|
||||
static
|
||||
#if defined USE_LEX_SYMBOL
|
||||
yy::parser::symbol_type yylex ()
|
||||
#ifdef TWO_STAGE_BUILD
|
||||
# define BUILD(Type, Value) build<Type> () = Value
|
||||
#else
|
||||
yy::parser::token_type yylex (yy::parser::semantic_type* yylval,
|
||||
yy::parser::location_type* yylloc)
|
||||
# define BUILD(Type, Value) build (Value)
|
||||
#endif
|
||||
{
|
||||
#ifndef USE_LEX_SYMBOL
|
||||
typedef yy::parser::token token;
|
||||
#endif
|
||||
typedef yy::parser::location_type location_type;
|
||||
static int stage = -1;
|
||||
++stage;
|
||||
if (stage == STAGE_MAX)
|
||||
{
|
||||
#if defined USE_LEX_SYMBOL
|
||||
return yy::parser::make_END_OF_FILE (location_type ());
|
||||
#else
|
||||
*yylloc = location_type ();
|
||||
return token::END_OF_FILE;
|
||||
#endif
|
||||
}
|
||||
else if (stage % 2)
|
||||
{
|
||||
#if defined USE_LEX_SYMBOL
|
||||
return yy::parser::make_NUMBER (stage, location_type ());
|
||||
#else
|
||||
# if defined ONE_STAGE_BUILD
|
||||
yylval->build (stage);
|
||||
# else
|
||||
yylval->build<int>() = stage;
|
||||
# endif
|
||||
*yylloc = location_type ();
|
||||
return token::NUMBER;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined USE_LEX_SYMBOL
|
||||
return yy::parser::make_TEXT (string_cast (stage), location_type ());
|
||||
#else
|
||||
# if defined ONE_STAGE_BUILD
|
||||
yylval->build (string_cast (stage));
|
||||
# else
|
||||
yylval->build<std::string>() = string_cast (stage);
|
||||
# endif
|
||||
*yylloc = location_type ();
|
||||
return token::TEXT;
|
||||
#endif
|
||||
}
|
||||
abort ();
|
||||
}
|
||||
|
||||
void
|
||||
yy::parser::error (const yy::parser::location_type&,
|
||||
const std::string& message)
|
||||
#define STAGE_MAX 5
|
||||
namespace yy
|
||||
{
|
||||
std::cerr << message << std::endl;
|
||||
static]AT_TOKEN_CTOR_IF([[
|
||||
parser::symbol_type yylex ()]], [[
|
||||
parser::token_type yylex (parser::semantic_type* yylval,
|
||||
parser::location_type* yylloc)]])[
|
||||
{
|
||||
typedef parser::location_type location;
|
||||
static int stage = -1;
|
||||
++stage;
|
||||
if (stage == STAGE_MAX)
|
||||
{]AT_TOKEN_CTOR_IF([[
|
||||
return parser::make_END_OF_FILE (location ());]], [[
|
||||
*yylloc = location ();
|
||||
return parser::token::END_OF_FILE;]])[
|
||||
}
|
||||
else if (stage % 2)
|
||||
{]AT_TOKEN_CTOR_IF([[
|
||||
return parser::make_NUMBER (stage, location ());]], [[
|
||||
yylval->BUILD (int, stage);
|
||||
*yylloc = location ();
|
||||
return parser::token::NUMBER;]])[
|
||||
}
|
||||
else
|
||||
{]AT_TOKEN_CTOR_IF([[
|
||||
return parser::make_TEXT (string_cast (stage), location ());]], [[
|
||||
yylval->BUILD (std::string, string_cast (stage));
|
||||
*yylloc = location ();
|
||||
return parser::token::TEXT;]])[
|
||||
}
|
||||
abort ();
|
||||
}
|
||||
|
||||
void
|
||||
parser::error (const parser::location_type&, const std::string& message)
|
||||
{
|
||||
std::cerr << message << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
@@ -195,14 +181,17 @@ AT_CHECK([./list], 0,
|
||||
[(0, 1, 2, 4)
|
||||
])
|
||||
|
||||
AT_BISON_OPTION_POPDEFS
|
||||
AT_CLEANUP
|
||||
])
|
||||
|
||||
AT_CHECK_VARIANTS([])
|
||||
AT_CHECK_VARIANTS([%define parse.assert])
|
||||
AT_CHECK_VARIANTS([[%define parse.assert %code {\n#define ONE_STAGE_BUILD\n}]])
|
||||
AT_CHECK_VARIANTS([[%define parse.assert %define lex_symbol %code {\n#define USE_LEX_SYMBOL\n}]])
|
||||
AT_CHECK_VARIANTS([[%define parse.assert %define lex_symbol %code {\n#define USE_LEX_SYMBOL\n} %define api.token.prefix "TOK_"]])
|
||||
AT_TEST([])
|
||||
AT_TEST([%define parse.assert])
|
||||
AT_TEST([[%define parse.assert %code {\n#define TWO_STAGE_BUILD\n}]])
|
||||
AT_TEST([[%define parse.assert %define api.token.constructor]])
|
||||
AT_TEST([[%define parse.assert %define api.token.constructor %define api.token.prefix "TOK_"]])
|
||||
|
||||
m4_popdef([AT_TEST])
|
||||
|
||||
|
||||
## ----------------------- ##
|
||||
|
||||
Reference in New Issue
Block a user