]> git.saurik.com Git - bison.git/blobdiff - tests/regression.at
* src/output.c (output_unsigned_int_table): New.
[bison.git] / tests / regression.at
index 849f526c2b75d995969026e783ed0e9219493c86..9ebff2e8fa8e7fde3d758a06a960e76605de1763 100644 (file)
@@ -1,5 +1,5 @@
 # Bison Regressions.                               -*- Autotest -*-
-# Copyright 2001 Free Software Foundation, Inc.
+# Copyright 2001, 2002 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@ AT_DATA([input.y],
 [[/* Bison used to swallow the character after `}'. */
 
 %%
-exp: { tests = {{{{{{{{{{}}}}}}}}}}; }
+exp: { tests = {{{{{{{{{{}}}}}}}}}}; };
 %%
 ]])
 
@@ -66,216 +66,6 @@ AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
 AT_CLEANUP
 
 
-## ------------------------- ##
-## Unresolved SR Conflicts.  ##
-## ------------------------- ##
-
-AT_SETUP([Unresolved SR Conflicts])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c -v], 0, [],
-[input.y contains 1 shift/reduce conflict.
-])
-
-# Check the contents of the report.
-AT_CHECK([cat input.output], [],
-[[State 5 contains 1 shift/reduce conflict.
-
-
-Grammar
-
-  Number, Line, Rule
-    0   3 $axiom -> exp $
-    1   3 exp -> exp OP exp
-    2   3 exp -> NUM
-
-
-Terminals, with rules where they appear
-
-$ (0) 0
-error (256)
-NUM (257) 2
-OP (258) 1
-
-
-Nonterminals, with rules where they appear
-
-$axiom (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
-
-
-state 0
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 2
-
-
-
-state 1
-
-    exp  ->  NUM .   (rule 2)
-
-    $default   reduce using rule 2 (exp)
-
-
-
-state 2
-
-    $axiom  ->  exp . $   (rule 0)
-    exp  ->  exp . OP exp   (rule 1)
-
-    $          shift, and go to state 3
-    OP         shift, and go to state 4
-
-
-
-state 3
-
-    $axiom  ->  exp $ .   (rule 0)
-
-    $default   accept
-
-
-state 4
-
-    exp  ->  exp OP . exp   (rule 1)
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 5
-
-
-
-state 5
-
-    exp  ->  exp . OP exp   (rule 1)
-    exp  ->  exp OP exp .   (rule 1)
-
-    OP         shift, and go to state 4
-
-    OP         [reduce using rule 1 (exp)]
-    $default   reduce using rule 1 (exp)
-
-
-
-]])
-
-AT_CLEANUP
-
-
-## --------------------- ##
-## Solved SR Conflicts.  ##
-## --------------------- ##
-
-AT_SETUP([Solved SR Conflicts])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%right OP
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c -v], 0, [], [])
-
-# Check the contents of the report.
-AT_CHECK([cat input.output], [],
-[[Conflict in state 5 between rule 2 and token OP resolved as shift.
-
-
-Grammar
-
-  Number, Line, Rule
-    0   4 $axiom -> exp $
-    1   4 exp -> exp OP exp
-    2   4 exp -> NUM
-
-
-Terminals, with rules where they appear
-
-$ (0) 0
-error (256)
-NUM (257) 2
-OP (258) 1
-
-
-Nonterminals, with rules where they appear
-
-$axiom (5)
-    on left: 0
-exp (6)
-    on left: 1 2, on right: 0 1
-
-
-state 0
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 2
-
-
-
-state 1
-
-    exp  ->  NUM .   (rule 2)
-
-    $default   reduce using rule 2 (exp)
-
-
-
-state 2
-
-    $axiom  ->  exp . $   (rule 0)
-    exp  ->  exp . OP exp   (rule 1)
-
-    $          shift, and go to state 3
-    OP         shift, and go to state 4
-
-
-
-state 3
-
-    $axiom  ->  exp $ .   (rule 0)
-
-    $default   accept
-
-
-state 4
-
-    exp  ->  exp OP . exp   (rule 1)
-
-    NUM        shift, and go to state 1
-
-    exp        go to state 5
-
-
-
-state 5
-
-    exp  ->  exp . OP exp   (rule 1)
-    exp  ->  exp OP exp .   (rule 1)
-
-    OP         shift, and go to state 4
-
-    $default   reduce using rule 1 (exp)
-
-
-
-]])
-
-AT_CLEANUP
-
-
-
-
 ## ------------------- ##
 ## Rule Line Numbers.  ##
 ## ------------------- ##
@@ -309,7 +99,7 @@ expr:
 
 {
 
-}
+};
 ]])
 
 AT_CHECK([bison input.y -o input.c -v], 0, [], [])
@@ -349,6 +139,8 @@ expr (7)
 
 state 0
 
+    $axiom  ->  . expr $   (rule 0)
+
     'a'        shift, and go to state 1
 
     $default   reduce using rule 3 (@2)
@@ -421,63 +213,6 @@ AT_CLEANUP
 
 
 
-## -------------------- ##
-## %expect not enough.  ##
-## -------------------- ##
-
-AT_SETUP([%expect not enough])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 0
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 1, [],
-[input.y contains 1 shift/reduce conflict.
-expected 0 shift/reduce conflicts
-])
-AT_CLEANUP
-
-
-## --------------- ##
-## %expect right.  ##
-## --------------- ##
-
-AT_SETUP([%expect right])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 1
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 0)
-AT_CLEANUP
-
-
-## ------------------ ##
-## %expect too much.  ##
-## ------------------ ##
-
-AT_SETUP([%expect too much])
-
-AT_DATA([input.y],
-[[%token NUM OP
-%expect 2
-%%
-exp: exp OP exp | NUM;
-]])
-
-AT_CHECK([bison input.y -o input.c], 1, [],
-[input.y contains 1 shift/reduce conflict.
-expected 2 shift/reduce conflicts
-])
-AT_CLEANUP
-
-
 ## ---------------------- ##
 ## Mixing %token styles.  ##
 ## ---------------------- ##
@@ -501,63 +236,79 @@ AT_CLEANUP
 
 
 
-## ----------------- ##
-## Invalid input 1.  ##
-## ----------------- ##
+## ---------------- ##
+## Invalid inputs.  ##
+## ---------------- ##
 
 
-AT_SETUP([Invalid input: 1])
+AT_SETUP([Invalid inputs])
 
 AT_DATA([input.y],
 [[%%
 ?
+default: 'a' }
+%{
+%&
+%a
+%-
 ]])
 
 AT_CHECK([bison input.y], [1], [],
 [[input.y:2: invalid input: `?'
-input.y:3: fatal error: no rules in the input grammar
+input.y:3: invalid input: `}'
+input.y:4: invalid input: `%{'
+input.y:5: invalid input: `%&'
+input.y:6: invalid input: `%a'
+input.y:7: invalid input: `%-'
 ]])
 
 AT_CLEANUP
 
 
-## ----------------- ##
-## Invalid input 2.  ##
-## ----------------- ##
 
+## -------------------- ##
+## Invalid %directive.  ##
+## -------------------- ##
 
-AT_SETUP([Invalid input: 2])
+
+AT_SETUP([Invalid %directive])
 
 AT_DATA([input.y],
-[[%%
-default: 'a' }
+[[%invalid
 ]])
 
 AT_CHECK([bison input.y], [1], [],
-[[input.y:2: invalid input: `}'
+[[input.y:1: unrecognized: %invalid
+input.y:1:    Skipping to next %
+input.y:2: fatal error: no input grammar
 ]])
 
 AT_CLEANUP
 
 
 
-## -------------------- ##
-## Invalid %directive.  ##
-## -------------------- ##
+## ------------------- ##
+## Token definitions.  ##
+## ------------------- ##
 
 
-AT_SETUP([Invalid %directive])
+AT_SETUP([Token definitions])
 
+# Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
 AT_DATA([input.y],
-[[%invalid
-]])
-
-AT_CHECK([bison input.y], [1], [],
-[[input.y:1: unrecognized: %invalid
-input.y:1:    Skipping to next %
-input.y:2: fatal error: no input grammar
+[[%token "end of file"
+%token 'a' "a"
+%token "b" 'b'
+%token "c" c
+%token d "d"
+%token e 'e'
+%token 'f' e
+%%
+exp: "a";
 ]])
 
+AT_CHECK([bison input.y -o input.c])
+AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -c])
 AT_CLEANUP
 
 
@@ -611,8 +362,8 @@ $ (0) 0
 ';' (59) 5
 '=' (61) 5
 error (256)
-undef_id_tok (257) 5
-const_id_tok (258) 5
+undef_id_tok (258) 5
+const_id_tok (259) 5
 Nonterminals, with rules where they appear
 $axiom (7)
     on left: 0
@@ -625,6 +376,7 @@ CONST_DEC (10)
 @1 (11)
     on left: 4, on right: 5
 state 0
+    $axiom  ->  . CONST_DEC_PART $   (rule 0)
     $default   reduce using rule 4 (@1)
     CONST_DEC_PART     go to state 1
     CONST_DEC_LIST     go to state 2
@@ -707,7 +459,7 @@ AT_CHECK([bison -v input.y -o input.c])
 # Check only the tables.  We don't use --no-parser, because it is
 # still to be implemented in the experimental branch of Bison.
 AT_CHECK([[sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c]], 0,
-[[static const char yytranslate[] =
+[[static const yy_token_number_type yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -734,36 +486,36 @@ AT_CHECK([[sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c]], 0,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     3,     4,     5,
-       6
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6
 };
-static const short yyprhs[] =
+static const unsigned char yyprhs[] =
 {
        0,     0,     3,     5,     6,     9,    14
 };
-static const short yyrhs[] =
+static const signed char yyrhs[] =
 {
        8,     0,    -1,     9,    -1,    -1,    10,    11,    -1,     3,
        4,     5,     8,    -1,     6,     8,    -1
 };
-static const short yyrline[] =
+static const unsigned char yyrline[] =
 {
        0,     2,     2,     3,     3,     4,     5
 };
 static const char *const yytname[] =
 {
   "$", "error", "$undefined.", "\"if\"", "\"const\"", "\"then\"",
-  "\"else\"", "$axiom", "statement", "struct_stat", "if", "else", NULL
+  "\"else\"", "$axiom", "statement", "struct_stat", "if", "else", 0
 };
 static const short yytoknum[] =
 {
-       0,   256,     2,   257,   258,   259,   260,    -1
+       0,   256,   257,   258,   259,   260,   261,    -1
 };
-static const short yyr1[] =
+static const yy_token_number_type yyr1[] =
 {
        0,     7,     8,     9,     9,    10,    11
 };
-static const short yyr2[] =
+static const unsigned char yyr2[] =
 {
        0,     2,     1,     0,     2,     4,     2
 };