With Théophile Ranquet.
* tests/local.at (AT_MAIN_DEFINE): New.
(AT_YYERROR_DEFINE): Improve formatting.
* tests/actions.at, tests/c++.at, tests/conflicts.at,
* tests/glr-regression.at, tests/input.at, tests/regression.at,
* tests/skeletons.at, tests/torture.at: Adjust.
* tests/c++.at: Add missing %skeleton for a PUSHDEFS, and a missing
PUSH/POPDEFS for another test.
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["123456789"])[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_CHECK([-d -v -o input.c input.y], 0)
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_FULL_COMPILE([input])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
}
]AT_YYERROR_DEFINE[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_CHECK([[-o input.c input.y]])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["a"])[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
AT_BISON_CHECK([[-o input.c input.y]])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["bcd"], [*lvalp = (toknum + 1) * 10])[
-
-int
-main (void)
-{
- yydebug = !!getenv("YYDEBUG");
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
}
]AT_YYERROR_DEFINE[
-
-int
-main ()
-{
- yy::parser p;
- p.set_debug_level (!!getenv ("YYDEBUG"));
- return p.parse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_CHECK([-o list.cc list.yy])
AT_SETUP([[Syntax error discarding no lookahead]])
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
AT_DATA_GRAMMAR([[input.yy]],
[[%skeleton "lalr1.cc"
std::cerr << m << std::endl;
}
-int
-main ()
-{
- yy::parser parser;
- return parser.parse ();
-}
+]AT_MAIN_DEFINE[
]])
+
AT_BISON_CHECK([[-o input.cc input.yy]])
AT_COMPILE_CXX([[input]])
# This used to print "Discarding 'a'." again at the end.
Reducing 'a'.
]])
+AT_BISON_OPTION_POPDEFS
AT_CLEANUP
AT_SETUP([[Syntax error as exception]])
+AT_BISON_OPTION_PUSHDEFS([%skeleton "lalr1.cc"])
+
AT_DATA_GRAMMAR([[input.yy]],
[[%skeleton "lalr1.cc"
{
std::cerr << "error: " << m << std::endl;
}
-
-int
-main ()
-{
- yy::parser parser;
- parser.set_debug_level (!!getenv ("YYDEBUG"));
- return parser.parse ();
-}
+]AT_MAIN_DEFINE[
]])
+
AT_BISON_CHECK([[-o input.cc input.yy]])
AT_COMPILE_CXX([[input]])
caught error
]])
+AT_BISON_OPTION_POPDEFS
AT_CLEANUP
/*-------.
| main. |
-`-------*/]AT_SKEL_JAVA_IF([[
-
-class input
-{
- public static void main (String args[]) throws IOException
- {
- YYParser p = new YYParser ();
- p.parse ();
- }
-}]], [AT_SKEL_CC_IF([[
-
-int
-main (void)
-{
- yy::parser parser;
- return parser.parse ();
-}]], [[
-
-int
-main (void)
-{
- return yyparse ();
-}]])])[
-]])
+`-------*/
+]AT_MAIN_DEFINE
+])
AT_FULL_COMPILE([[input]])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["aaa"])[
-
-int
-main (void)
-{
- return yyparse ();
-}
-]])
+]AT_MAIN_DEFINE
+])
AT_BISON_OPTION_POPDEFS
# Show canonical LR's failure.
}
int
-main(int argc, char* argv[])
+main (int argc, char* argv[])
{
int res;
input = stdin;
%%
]AT_YYLEX_DEFINE(["a"])[
]AT_YYERROR_DEFINE[
-int
-main (void)
-{
- return yyparse () != 1;
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
]])
AT_COMPILE([glr-regr5])
-AT_PARSER_CHECK([[./glr-regr5]], 0, [],
+AT_PARSER_CHECK([[./glr-regr5]], 1, [],
[syntax is ambiguous
])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE(["a"])[
-int
-main (void)
-{
- return yyparse () != 1;
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
]])
AT_COMPILE([glr-regr6])
-AT_PARSER_CHECK([[./glr-regr6]], 0,
+AT_PARSER_CHECK([[./glr-regr6]], 1,
[Destructor called.
],
[syntax is ambiguous
}
}
-int
-main (void)
-{
- yyparse();
- return 0;
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
return input[toknum++];
}
-int
-main (void)
-{
- return yyparse () != 1;
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
]])
AT_COMPILE([glr-regr17])
-AT_PARSER_CHECK([[./glr-regr17]], 0, [],
+AT_PARSER_CHECK([[./glr-regr17]], 1, [],
[1.1-2.2: syntax is ambiguous
])
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
#include "input.h"
int yyparse (void);
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
[m4_fatal([$0: Invalid arguments: $@])])dnl
m4_pushdef([AT_DEFINES_IF],
[m4_bmatch([$3], [%defines], [$1], [$2])])
+m4_pushdef([AT_DEBUG_IF],
+[m4_bmatch([$3], [%debug\|%define parse.trace], [$1], [$2])])
m4_pushdef([AT_SKEL_CC_IF],
[m4_bmatch([$3], [%language "[Cc]\+\+"\|%skeleton "[a-z0-9]+\.cc"], [$1], [$2])])
m4_pushdef([AT_SKEL_JAVA_IF],
m4_popdef([AT_GLR_CC_IF])
m4_popdef([AT_LALR1_CC_IF])
m4_popdef([AT_DEFINES_IF])
+m4_popdef([AT_DEBUG_IF])
AT_LOC_POPDEF])dnl
])# AT_BISON_OPTION_POPDEFS
[c++], [[/* A C++ error reporting function. */
void
]AT_NAME_PREFIX[::parser::error (]AT_LOCATION_IF([[const location_type& l, ]])[const std::string& m)
-{ std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
+{
+ std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
}]],
[java], [AT_LOCATION_IF([[public void yyerror (Calc.Location l, String s)
{
])
+# AT_MAIN_DEFINE
+# --------------
+m4_define([AT_MAIN_DEFINE],
+[m4_case(AT_LANG,
+[c],
+[[#include <stdlib.h> /* getenv. */
+int
+main (void)
+{]AT_DEBUG_IF([
+ yydebug = !!getenv("YYDEBUG");])[
+ return !!yyparse ();
+}]],
+[c++],
+[[#include <cstdlib> // getenv.
+int
+main (void)
+{
+ yy::parser p;]AT_DEBUG_IF([
+ p.set_debug_level (!!getenv("YYDEBUG"));])[
+ return !!p.parse ();
+}]],
+[java],
+[[class input
+{
+ public static void main (String args[]) throws IOException
+ {
+ YYParser p = new YYParser ();
+ p.parse ();
+ }
+}]])])
+
+
## --------------- ##
## Running Bison. ##
## --------------- ##
%%
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE([{ SPECIAL }])[
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
return parser.parse ();
}
])[
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
])# _AT_DATA_DANCER_Y
assert (toknum < sizeof tokens / sizeof *tokens);
return tokens[toknum++];
}
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
])# _AT_DATA_EXPECT2_Y
]AT_YYERROR_DEFINE[
]AT_YYLEX_DEFINE([{ 1, 2, 3, 0 }])[
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
recovery by shifting 3 tokens) in order to detect any loss of the
reallocated buffer. */
]AT_YYLEX_DEFINE(["abc"])[
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_BISON_OPTION_POPDEFS
{
return 'a';
}
-
-int
-main (void)
-{
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
]])
AT_DATA_GRAMMAR([[input-cmd-line.y]],
}
return inner++;
}
-int
-main (void)
-{
- yydebug = !!getenv ("YYDEBUG");
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
EOF
]])
AT_BISON_OPTION_POPDEFS
assert (counter++ == MAX + 1);
return 0;
}
-
-int
-main (void)
-{
- yydebug = !!getenv ("YYDEBUG");
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
EOF
]])
return counter++;
}
-int
-main (void)
-{
- yydebug = !!getenv ("YYDEBUG");
- return yyparse ();
-}
+]AT_MAIN_DEFINE[
EOF
]])