%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE([":"])[
-]AT_LALR1_CC_IF(
-[int
-yyparse ()
-{
- yy::parser parser;
-#if YYDEBUG
- parser.set_debug_level (YYDEBUG);
-#endif
- return parser.parse ();
-}
-])[
]AT_MAIN_DEFINE[
]])
])# _AT_DATA_DANCER_Y
# Bison once mistook braced code in a declaration in the rules section to be a
# rule action.
-AT_BISON_OPTION_PUSHDEFS
+AT_BISON_OPTION_PUSHDEFS([%debug])
AT_DATA_GRAMMAR([input.y],
[[%{
#include <stdio.h>
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
-
+%debug
%error-verbose
%%
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["a"])[
-
-int
-main (void)
-{
- yydebug = 1;
- return !yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
-AT_BISON_CHECK([-t -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input])
-AT_PARSER_CHECK([./input], 0,
+AT_PARSER_CHECK([./input --debug], 1,
[[Bison would once convert this action to a midrule because of the subsequent braced code.
]],
[[Starting parse
%token 'a' "A";
]])
-AT_BISON_CHECK([-t -o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y])
AT_CLEANUP
m4_pushdef([AT_LAC_CHECK], [
-AT_BISON_OPTION_PUSHDEFS([$1])
+AT_BISON_OPTION_PUSHDEFS([%debug $1])
AT_DATA_GRAMMAR([input.y],
[[%code {
]AT_YYERROR_DECLARE[
int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[);
}
-
+%debug
]$1[
%define parse.error verbose
%token 'c'
return *input++;
}
-int
-main (void)
-{
- yydebug = 1;
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
-Dparse.lac.memory-trace=full \
- -t -o input.c input.y]], [[0]], [],
+ -o input.c input.y]], [[0]], [],
[[input.y: warning: 21 shift/reduce conflicts [-Wconflicts-sr]
]])
AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]])
+AT_PARSER_CHECK([[./input --debug > stdout.txt 2> stderr.txt]], [[1]])
# Make sure syntax error doesn't forget that 'a' is expected. It would
# be forgotten without lookahead correction.
AT_SETUP([[LAC: Memory exhaustion]])
m4_pushdef([AT_LAC_CHECK],
-[AT_BISON_OPTION_PUSHDEFS
+[AT_BISON_OPTION_PUSHDEFS([%debug])
AT_DATA_GRAMMAR([input.y],
[[%code {
#include <stdio.h>
]AT_YYLEX_DECLARE[
#define YYMAXDEPTH 8
}
-
+%debug
%error-verbose
%%
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["$1"])[
-int
-main (void)
-{
- yydebug = 1;
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \
- -t -o input.c input.y]], [[0]], [],
+ -o input.c input.y]], [[0]], [],
[[input.y: warning: 8 shift/reduce conflicts [-Wconflicts-sr]
]])
AT_COMPILE([[input]])
# Check for memory exhaustion during parsing.
AT_LAC_CHECK([])
-AT_PARSER_CHECK([[./input]], [[2]], [],
+AT_PARSER_CHECK([[./input --debug]], [[2]], [],
[[Starting parse
Entering state 0
Reading a token: Now at end of input.
# Induce an immediate syntax error with an undefined token, and check
# for memory exhaustion while building syntax error message.
AT_LAC_CHECK([z], [[0]])
-AT_PARSER_CHECK([[./input]], [[2]], [],
+AT_PARSER_CHECK([[./input --debug]], [[2]], [],
[[Starting parse
Entering state 0
Reading a token: Next token is token $undefined ()