]> git.saurik.com Git - bison.git/blobdiff - tests/actions.at
* src/state.h, src/state.c (state_rule_lookaheads_print): New.
[bison.git] / tests / actions.at
index 78531fcdd5024610192430ab6991f0b301625d24..ed56174bccf787021a74f9764a6f7e01cbbd009b 100644 (file)
@@ -31,22 +31,25 @@ AT_SETUP([Mid-rule actions])
 
 AT_DATA([[input.y]],
 [[%{
-#include <stdio.h>
-#include <stdlib.h>
-static void yyerror (const char *msg);
-static int yylex (void);
+# include <stdio.h>
+# include <stdlib.h>
+  static void yyerror (const char *msg);
+  static int yylex (void);
+# define YYDEBUG         1
+# define YYERROR_VERBOSE 1
 %}
 %%
-exp:     { printf ("0\n"); }
-     '1' { printf ("1\n"); }
-     '2' { printf ("2\n"); }
-     '3' { printf ("3\n"); }
-     '4' { printf ("4\n"); }
-     '5' { printf ("5\n"); }
-     '6' { printf ("6\n"); }
-     '7' { printf ("7\n"); }
-     '8' { printf ("8\n"); }
-     '9' { printf ("9\n"); }
+exp:     { putchar ('0'); }
+     '1' { putchar ('1'); }
+     '2' { putchar ('2'); }
+     '3' { putchar ('3'); }
+     '4' { putchar ('4'); }
+     '5' { putchar ('5'); }
+     '6' { putchar ('6'); }
+     '7' { putchar ('7'); }
+     '8' { putchar ('8'); }
+     '9' { putchar ('9'); }
+         { putchar ('\n'); }
    ;
 %%
 static int
@@ -71,17 +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,
-[[0
-1
-2
-3
-4
-5
-6
-7
-8
-9
+AT_CHECK([./input], 0,
+[[0123456789
+]])
+
+AT_CLEANUP
+
+
+
+## ---------------- ##
+## Exotic Dollars.  ##
+## ---------------- ##
+
+AT_SETUP([Exotic Dollars])
+
+# Make sure complex $n work.
+
+AT_DATA([[input.y]],
+[[%{
+# include <stdio.h>
+# include <stdlib.h>
+  static void yyerror (const char *msg);
+  static int yylex (void);
+# define YYDEBUG         1
+# define YYERROR_VERBOSE 1
+%}
+
+%union
+{
+  int val;
+};
+
+%type <val> a_1 a_2 a_4 a_5
+            sum_of_the_five_previous_values
+
+%%
+exp: a_1 a_2 { $<val>$ = 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:
+    {
+       $$ = $<val>0 + $<val>-1 + $<val>-2 + $<val>-3 + $<val>-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