glr.c: add support for parse.error=custom

* data/skeletons/glr.c (yyreportSyntaxError): Call the user's
yyreport_syntax_error in custom mode.
* tests/calc.at: Check it.
This commit is contained in:
Akim Demaille
2020-01-29 19:24:40 +01:00
parent c4a08d1899
commit 792fc34016
2 changed files with 21 additions and 1 deletions

View File

@@ -2180,6 +2180,25 @@ yysyntax_error_arguments (const yyGLRStack* yystackp,
}
]])[
]m4_case(b4_percent_define_get([[parse.error]]),
[custom],
[[/* User defined function to report a syntax error. */
typedef yyGLRStack yyparse_context_t;
static int
yyreport_syntax_error (const yyGLRStack* yystackp]b4_user_formals[);
]b4_locations_if([[/* The location of this context. */
static YYLTYPE *
yyparse_context_location (const yyGLRStack *yystackp) YY_ATTRIBUTE_UNUSED;
static YYLTYPE *
yyparse_context_location (const yyGLRStack *yystackp)
{
YYUSE (yystackp);
return &yylloc;
}]])])[
static void
yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
{

View File

@@ -877,8 +877,9 @@ AT_CHECK_CALC_GLR([%define parse.error verbose])
AT_CHECK_CALC_GLR([%define api.pure %locations])
AT_CHECK_CALC_GLR([%define parse.error verbose %locations])
AT_CHECK_CALC_GLR([%define parse.error verbose %locations %defines %name-prefix "calc" %verbose %yacc])
AT_CHECK_CALC_GLR([%define parse.error custom %locations %defines %name-prefix "calc" %verbose %yacc])
AT_CHECK_CALC_GLR([%define parse.error detailed %locations %defines %name-prefix "calc" %verbose %yacc])
AT_CHECK_CALC_GLR([%define parse.error verbose %locations %defines %name-prefix "calc" %verbose %yacc])
AT_CHECK_CALC_GLR([%debug])
AT_CHECK_CALC_GLR([%define parse.error verbose %debug %locations %defines %name-prefix "calc" %verbose %yacc])