X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/d61e59ea0eeefc5eb310337251c1acf0fcf25836..6192d2c6de859990f8e90c128de9733c1315db7a:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index 71c3bbf0..2f029939 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1583,3 +1583,87 @@ Stack now 0 m4_popdef([AT_LAC_CHECK]) AT_CLEANUP + + +## ---------------------- ## +## Lex and parse params. ## +## ---------------------- ## + +# AT_TEST(SKELETON) +# ----------------- +# Check that the identifier of the params is properly fetched +# even when there are trailing blanks. + +m4_pushdef([AT_TEST], +[AT_SETUP([[Lex and parse params: $1]]) + +AT_BISON_OPTION_PUSHDEFS([%locations %skeleton $1]) + +## FIXME: Improve parsing of parse-param and use the generated +## yyerror. +AT_DATA_GRAMMAR([input.y], +[[%defines +%locations +%skeleton $1 +%union { int ival; } +%parse-param { int x } +// Spaces, tabs, and new lines. +%parse-param { @&t@ + int y @&t@ + @&t@ + @&t@ +} + +%{ +#include +#include + +]AT_SKEL_CC_IF([], [[ +static +void +yyerror (int x, int y, const char *msg) +{ + fprintf (stderr, "x: %d, y: %d, %s\n", x, y, msg); +}]])[ + + ]AT_YYLEX_DECLARE[ +%} + +%% +exp: 'a' { fprintf (stdout, "x: %d, y: %d\n", x, y); }; +%% +]AT_YYLEX_DEFINE(["a"])[ + +]AT_SKEL_CC_IF( +[AT_YYERROR_DEFINE + +int +yyparse (int x, int y) +{ + yy::parser parser(x, y); + return parser.parse (); +} +])[ + +int +main (void) +{ + return !!yyparse(1, 2); +} +]]) + +AT_FULL_COMPILE([input]) +AT_CHECK([./input], 0, [[x: 1, y: 2 +]]) +AT_BISON_OPTION_POPDEFS + +AT_CLEANUP +]) + +## FIXME: test Java, and iterate over skeletons. +AT_TEST("yacc.c") +AT_TEST("glr.c") +AT_TEST("lalr1.cc") +AT_TEST("glr.cc") + +m4_popdef([AT_TEST])