X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/3eb4f1a3e62807125a815dc572da9204b5b51865..0f92546f47f5bdac1025ca4b423c1ebfc90dc1fa:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index 58988c81..8a285af1 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -401,15 +401,15 @@ default: 'a' } ]]) AT_BISON_CHECK([input.y], [1], [], -[[input.y:2.1: invalid character: '?' -input.y:3.14: invalid character: '}' -input.y:4.1: invalid character: '%' -input.y:4.2: invalid character: '&' -input.y:5.1-17: invalid directive: '%a-does-not-exist' -input.y:6.1: invalid character: '%' -input.y:6.2: invalid character: '-' -input.y:7.1-8.0: missing '%}' at end of file -input.y:7.1-8.0: syntax error, unexpected %{...%} +[[input.y:2.1: error: invalid character: '?' +input.y:3.14: error: invalid character: '}' +input.y:4.1: error: invalid character: '%' +input.y:4.2: error: invalid character: '&' +input.y:5.1-17: error: invalid directive: '%a-does-not-exist' +input.y:6.1: error: invalid character: '%' +input.y:6.2: error: invalid character: '-' +input.y:7.1-8.0: error: missing '%}' at end of file +input.y:7.1-8.0: error: syntax error, unexpected %{...%} ]]) AT_CLEANUP @@ -428,7 +428,7 @@ AT_DATA([input.y], ]]) AT_BISON_CHECK([input.y], [1], [], -[[input.y:3.1-15: syntax error, unexpected %initial-action, expecting {...} +[[input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...} ]]) AT_CLEANUP @@ -908,7 +908,6 @@ m4_define([AT_CHECK_DANCER], [AT_SETUP([Dancer $1]) AT_BISON_OPTION_PUSHDEFS([$1]) _AT_DATA_DANCER_Y([$1]) -AT_BISON_CHECK([-o dancer.c dancer.y]) AT_FULL_COMPILE([dancer]) AT_PARSER_CHECK([./dancer], 1, [], [syntax error, unexpected ':' @@ -993,7 +992,6 @@ m4_define([AT_CHECK_EXPECT2], [AT_SETUP([Expecting two tokens $1]) AT_BISON_OPTION_PUSHDEFS([$1]) _AT_DATA_EXPECT2_Y([$1]) -AT_BISON_CHECK([-o expect2.c expect2.y]) AT_FULL_COMPILE([expect2]) AT_PARSER_CHECK([./expect2], 1, [], [syntax error, unexpected '+', expecting A or B @@ -1463,7 +1461,7 @@ main (void) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ -Dparse.lac.memory-trace=full \ -t -o input.c input.y]], [[0]], [], -[[input.y: conflicts: 21 shift/reduce +[[input.y: warning: 21 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]]) @@ -1476,17 +1474,17 @@ AT_CHECK([[grep 'syntax error,' stderr.txt]], [[0]], # Check number of default reductions in inconsistent states to be sure # syntax error is detected before unnecessary reductions are performed. -AT_CHECK([[perl -0777 -ne 'print s/inconsistent default reduction//g;' \ +AT_CHECK([[$PERL -0777 -ne 'print s/inconsistent default reduction//g;' \ < stdout.txt || exit 77]], [[0]], [[14]]) # Check number of default reductions in consistent states to be sure # it is performed before the syntax error is detected. -AT_CHECK([[perl -0777 -ne 'print s/\bconsistent default reduction//g;' \ +AT_CHECK([[$PERL -0777 -ne 'print s/\bconsistent default reduction//g;' \ < stdout.txt || exit 77]], [[0]], [[2]]) # Check number of reallocs to be sure reallocated memory isn't somehow # lost between LAC invocations. -AT_CHECK([[perl -0777 -ne 'print s/\(realloc//g;' < stderr.txt \ +AT_CHECK([[$PERL -0777 -ne 'print s/\(realloc//g;' < stderr.txt \ || exit 77]], [[0]], [[3]]) AT_BISON_OPTION_POPDEFS @@ -1539,7 +1537,7 @@ main (void) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ -t -o input.c input.y]], [[0]], [], -[[input.y: conflicts: 8 shift/reduce +[[input.y: warning: 8 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) AT_BISON_OPTION_POPDEFS @@ -1578,3 +1576,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])