c++: get rid of global_tokens_and_yystype

This was a hack to make it easier for people to migrate from yacc.c to
lalr1.cc and from glr.c to glr.cc: when set, YYSTYPE and YYLTYPE were
`#defined`.  It was never documented (just mentioned in NEWS for Bison
2.2, 2006-05-19), but was used to simplify the test suite.  Stop that:
adjust the test suite to the skeletons, not the converse.

In C++ use yy::parser::semantic_type, yy::parser::location_type, and
yy::parser::token::MY_TOKEN, instead of YYSTYPE, YYLTYPE and MY_TOKEN.

* data/skeletons/glr.cc, data/skeletons/lalr1.cc: Remove its support.
* tests/actions.at, tests/c++.at, tests/calc.at: Adjust.
This commit is contained in:
Akim Demaille
2020-06-16 08:01:48 +02:00
parent e077bf1ebc
commit efb65daa36
6 changed files with 4 additions and 28 deletions

3
TODO
View File

@@ -41,9 +41,6 @@ Use "•" instead of ".".
Not all the conflicts have counterexamples generated. See the "break"s in Not all the conflicts have counterexamples generated. See the "break"s in
counterexample_report_state. counterexample_report_state.
** glr.cc
Get rid of global_tokens_and_yystype.
** Bistromathic ** Bistromathic
- Hitting tab on a line with a syntax error is ugly - Hitting tab on a line with a syntax error is ugly

View File

@@ -252,14 +252,9 @@ m4_define([b4_undef_symbol_kind],
# ----------------- # -----------------
# Remove redirections for glr.c. # Remove redirections for glr.c.
m4_define([b4_glr_cc_cleanup], m4_define([b4_glr_cc_cleanup],
[b4_percent_define_flag_if([[global_tokens_and_yystype]], [],
[[#undef ]b4_symbol(-2, [id])[ [[#undef ]b4_symbol(-2, [id])[
#undef ]b4_symbol(0, [id])[ #undef ]b4_symbol(0, [id])[
#undef ]b4_symbol(1, [id])[ #undef ]b4_symbol(1, [id])[
]])[
#undef ]b4_api_PREFIX[STYPE
#undef ]b4_api_PREFIX[LTYPE
]b4_undef_symbol_kind(-2)dnl ]b4_undef_symbol_kind(-2)dnl
b4_symbol_foreach([b4_undef_symbol_kind])dnl b4_symbol_foreach([b4_undef_symbol_kind])dnl
@@ -377,10 +372,6 @@ b4_percent_code_get([[requires]])[
]b4_parse_param_vars[ ]b4_parse_param_vars[
}; };
]dnl Redirections for glr.c.
b4_percent_define_flag_if([[global_tokens_and_yystype]],
[b4_token_defines
])[
]b4_namespace_close[ ]b4_namespace_close[
]b4_percent_code_get([[provides]])[ ]b4_percent_code_get([[provides]])[

View File

@@ -493,14 +493,6 @@ m4_define([b4_shared_declarations],
]b4_public_types_define([$1])])[ ]b4_public_types_define([$1])])[
]b4_namespace_close[ ]b4_namespace_close[
]b4_percent_define_flag_if([[global_tokens_and_yystype]],
[b4_token_defines
#ifndef ]b4_api_PREFIX[STYPE
// Redirection for backward compatibility.
# define ]b4_api_PREFIX[STYPE b4_namespace_ref::b4_parser_class::semantic_type
#endif
])[
]b4_percent_code_get([[provides]])[ ]b4_percent_code_get([[provides]])[
]]) ]])

View File

@@ -607,7 +607,6 @@ $5
{ {
int ival; int ival;
}]) }])
AT_LALR1_CC_IF([%define global_tokens_and_yystype])
m4_ifval([$6], [[%code provides {]], [[%code {]]) m4_ifval([$6], [[%code provides {]], [[%code {]])
AT_LALR1_CC_IF([typedef yy::location YYLTYPE;])[ AT_LALR1_CC_IF([typedef yy::location YYLTYPE;])[
]AT_YYLEX_DECLARE[ ]AT_YYLEX_DECLARE[

View File

@@ -803,12 +803,10 @@ AT_DATA_GRAMMAR([[input.yy]],
[[%language "C++" [[%language "C++"
%define api.namespace {]$1[} %define api.namespace {]$1[}
%union { int i; } %union { int i; }
%define global_tokens_and_yystype
%locations %locations
%code { %code {
// YYSTYPE contains a namespace reference. int yylex (]$1[::parser::semantic_type *lval, const ]$1[::parser::location_type*) {
int yylex (YYSTYPE *lval, const ]$1[::parser::location_type*) {
lval->i = 3; lval->i = 3;
return 0; return 0;
} }

View File

@@ -213,12 +213,12 @@ read_integer (]AT_YYLEX_FORMALS[)
{ {
unget_char (]AT_YYLEX_PRE_ARGS[ c); unget_char (]AT_YYLEX_PRE_ARGS[ c);
]AT_VAL[.ival = read_integer (]AT_YYLEX_ARGS[); ]AT_VAL[.ival = read_integer (]AT_YYLEX_ARGS[);
return ]AT_TOKEN_PREFIX[NUM; return ]AT_CXX_IF([AT_NAMESPACE::parser::token::])[]AT_TOKEN_PREFIX[NUM;
} }
/* Return end-of-file. */ /* Return end-of-file. */
if (c == EOF) if (c == EOF)
return ]AT_TOKEN_PREFIX[CALC_EOF; return ]AT_CXX_IF([AT_NAMESPACE::parser::token::])[]AT_TOKEN_PREFIX[CALC_EOF;
/* An explicit error raised by the scanner. */ /* An explicit error raised by the scanner. */
if (c == '#') if (c == '#')
@@ -226,7 +226,7 @@ read_integer (]AT_YYLEX_FORMALS[)
fprintf (stderr, "%d.%d: ", fprintf (stderr, "%d.%d: ",
AT_LOC_FIRST_LINE, AT_LOC_FIRST_COLUMN);])[ AT_LOC_FIRST_LINE, AT_LOC_FIRST_COLUMN);])[
fputs ("syntax error: invalid character: '#'\n", stderr); fputs ("syntax error: invalid character: '#'\n", stderr);
return ]AT_TOKEN_PREFIX[]AT_API_PREFIX[error; return ]AT_CXX_IF([AT_NAMESPACE::parser::token::])[]AT_TOKEN_PREFIX[]AT_API_PREFIX[error;
} }
/* Return single chars. */ /* Return single chars. */
@@ -444,7 +444,6 @@ m4_define([_AT_DATA_CALC_Y(c)],
[AT_DATA_GRAMMAR([calc.y], [AT_DATA_GRAMMAR([calc.y],
[[/* Infix notation calculator--calc */ [[/* Infix notation calculator--calc */
]$4[ ]$4[
]AT_CXX_IF([%define global_tokens_and_yystype])[
]AT_LANG_MATCH( ]AT_LANG_MATCH(
[d], [[ [d], [[
%code imports { %code imports {