X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/931394cbc10909854852366d589f1d25527922fc..10e5b8bd0a5e704006b371ce7fb9e4bea6c79a06:/tests/actions.at diff --git a/tests/actions.at b/tests/actions.at index 79dee6fb..ed56174b 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -31,10 +31,12 @@ AT_SETUP([Mid-rule actions]) AT_DATA([[input.y]], [[%{ -#include -#include -static void yyerror (const char *msg); -static int yylex (void); +# include +# include + static void yyerror (const char *msg); + static int yylex (void); +# define YYDEBUG 1 +# define YYERROR_VERBOSE 1 %} %% exp: { putchar ('0'); } @@ -72,8 +74,81 @@ main (void) AT_CHECK([bison input.y -d -v -o input.c]) AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore]) -AT_CHECK([input], 0, +AT_CHECK([./input], 0, [[0123456789 ]]) AT_CLEANUP + + + +## ---------------- ## +## Exotic Dollars. ## +## ---------------- ## + +AT_SETUP([Exotic Dollars]) + +# Make sure complex $n work. + +AT_DATA([[input.y]], +[[%{ +# include +# include + static void yyerror (const char *msg); + static int yylex (void); +# define YYDEBUG 1 +# define YYERROR_VERBOSE 1 +%} + +%union +{ + int val; +}; + +%type a_1 a_2 a_4 a_5 + sum_of_the_five_previous_values + +%% +exp: a_1 a_2 { $$ = 3; } a_4 a_5 sum_of_the_five_previous_values + { + printf ("%d\n", $6); + } +; +a_1: { $$ = 1; }; +a_2: { $$ = 2; }; +a_4: { $$ = 4; }; +a_5: { $$ = 5; }; + +sum_of_the_five_previous_values: + { + $$ = $0 + $-1 + $-2 + $-3 + $-4; + } +; + +%% +static int +yylex (void) +{ + return EOF; +} + +static void +yyerror (const char *msg) +{ + fprintf (stderr, "%s\n", msg); +} + +int +main (void) +{ + return yyparse (); +} +]]) + +AT_CHECK([bison input.y -d -v -o input.c]) +AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore]) +AT_CHECK([./input], 0, +[[15 +]]) + +AT_CLEANUP