The series of patches installs support for `%define parse.error custom`
in glr2.cc. It has the same interface as that of lalr1.cc. For instance
(taken from examples/c++/glr):
// Generate a custom error message.
void
yy::parser::report_syntax_error (const context& ctx) const
{
std::cerr << ctx.location () << ": syntax error";
if (!ctx.lookahead ().empty ())
std::cerr << " on token " << ctx.lookahead ().name ();
{
enum { TOKENMAX = 10 };
symbol_kind_type expected[TOKENMAX];
int n = ctx.expected_tokens (expected, TOKENMAX);
if (0 < n)
{
for (int i = 0; i < n; ++i)
std::cerr << (i == 0 ? " (expected " : " or ")
<< symbol_name (expected[i]);
std::cerr << ')';
}
}
std::cerr << '\n';
}
This was reported by Tom Shields <[email protected]>.
<https://lists.gnu.org/r/bug-bison/2021-08/msg00003.html>
Forthcoming changes will address the fact that currently one cannot
link two glr2.cc parsers together.
Akim Demaille (5):
c++: avoid using the obsolete names
c++: add move assignments to the symbol type
glr2.cc: start the transition to using symbol_type
glr2.cc: custom error messages
c++: demonstrate custom error messages in the examples
data/skeletons/c++.m4 | 57 +++-
data/skeletons/glr2.cc | 460 ++++++++++++++++++--------------
data/skeletons/lalr1.cc | 8 +-
data/skeletons/variant.hh | 4 +-
examples/c++/README.md | 9 +
examples/c++/glr/README.md | 3 +
examples/c++/glr/c++-types.test | 2 +-
examples/c++/glr/c++-types.yy | 47 +++-
examples/c/bistromathic/parse.y | 5 +-
tests/c++.at | 5 +-
tests/calc.at | 5 +
tests/glr-regression.at | 26 +-
tests/local.at | 2 +-
tests/types.at | 1 +
14 files changed, 395 insertions(+), 239 deletions(-)
--
2.32.0