]> git.saurik.com Git - bison.git/blobdiff - tests/sets.at
Require the generation of parse-gram.output.
[bison.git] / tests / sets.at
index 872cd8726e3861baa3087cb63eba18d1c36d4d79..165dabac7dade957c77fbd4d5b71c2e5b2aa0fa4 100644 (file)
@@ -1,20 +1,19 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
-# Copyright 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2005, 2007 Free Software Foundation, Inc.
 
-# This program is free software; you can redistribute it and/or modify
+# 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
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-
+#
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 
 # AT_EXTRACT_SETS(INPUT, OUTPUT)
 # ------------------------------
@@ -25,28 +24,28 @@ m4_define([AT_EXTRACT_SETS],
 [AT_DATA([extract.sed],
 [[#n
 /^NULLABLE$/ {
-   :nullable
+   :null
    p
    n
-   /^[         ]*$/! b nullable
+   /^[  ]*$/ !b null
 }
 /^FIRSTS$/ {
    :firsts
    p
    n
-   /^[         ]*$/! b firsts
+   /^[  ]*$/ !b firsts
 }
 /^FDERIVES$/ {
-   :fderives
+   :fderiv
    p
    n
-   /^[         ]*$/! b fderives
+   /^[  ]*$/ !b fderiv
 }
 /^DERIVES$/ {
-   :derives
+   :deriv
    p
    n
-   /^[         ]*$/! b derives
+   /^[  ]*$/ !b deriv
 }
 ]])
 AT_CHECK([sed -f extract.sed $1], 0, [stdout])
@@ -77,32 +76,32 @@ AT_DATA([[input.y]],
 e: 'e' | /* Nothing */;
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
-       $axiom derives
-               1: e $ (rule 0)
+       $accept derives
+                 0  e $end
        e derives
-               2: 'e' (rule 1)
-               3: (rule 2)
+                 1  'e'
+                 2  /* empty */
 NULLABLE
-       $axiom: no
+       $accept: no
        e: yes
 FIRSTS
-       $axiom firsts
-               4 ($axiom)
-               5 (e)
+       $accept firsts
+               $accept
+               e
        e firsts
-               5 (e)
+               e
 FDERIVES
-       $axiom derives
-               0: e $
-               1: 'e'
-               2:
+       $accept derives
+                 0  e $end
+                 1  'e'
+                 2  /* empty */
        e derives
-               1: 'e'
-               2:
+                 1  'e'
+                 2  /* empty */
 ]])
 
 AT_CLEANUP
@@ -151,34 +150,34 @@ AT_SETUP([Broken Closure])
 
 AT_DATA([input.y],
 [[%%
-a: b
-b: c
-c: d
-d: e
-e: f
-f: g
-g: h
-h: 'h'
+a: b;
+b: c;
+c: d;
+d: e;
+e: f;
+f: g;
+g: h;
+h: 'h';
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 
-AT_CHECK([[sed -n 's/[  ]*$//;/^TC: Output BEGIN/,/^TC: Output END/p' stderr]], [],
-[[TC: Output BEGIN
+AT_CHECK([[sed -n 's/[  ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
+[[RTC: Firsts Output BEGIN
 
    012345678
   .---------.
- 0| 11111111|
- 1|  1111111|
- 2|   111111|
- 3|    11111|
- 4|     1111|
- 5|      111|
- 6|       11|
- 7|        1|
- 8|         |
+ 0|111111111|
+ 1| 11111111|
+ 2|  1111111|
+ 3|   111111|
+ 4|    11111|
+ 5|     1111|
+ 6|      111|
+ 7|       11|
+ 8|        1|
   `---------'
-TC: Output END
+RTC: Firsts Output END
 ]])
 
 AT_CLEANUP
@@ -207,47 +206,95 @@ exp:
  ;
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
-       $axiom derives
-               1: exp $ (rule 0)
+       $accept derives
+                 0  exp $end
        exp derives
-               2: exp '<' exp (rule 1)
-               3: exp '>' exp (rule 2)
-               4: exp '+' exp (rule 3)
-               5: exp '-' exp (rule 4)
-               6: exp '^' exp (rule 5)
-               7: exp '=' exp (rule 6)
-               8: "exp" (rule 7)
+                 1  exp '<' exp
+                 2  exp '>' exp
+                 3  exp '+' exp
+                 4  exp '-' exp
+                 5  exp '^' exp
+                 6  exp '=' exp
+                 7  "exp"
 NULLABLE
-       $axiom: no
+       $accept: no
        exp: no
 FIRSTS
-       $axiom firsts
-               10 ($axiom)
-               11 (exp)
+       $accept firsts
+               $accept
+               exp
        exp firsts
-               11 (exp)
+               exp
 FDERIVES
-       $axiom derives
-               0: exp $
-               1: exp '<' exp
-               2: exp '>' exp
-               3: exp '+' exp
-               4: exp '-' exp
-               5: exp '^' exp
-               6: exp '=' exp
-               7: "exp"
+       $accept derives
+                 0  exp $end
+                 1  exp '<' exp
+                 2  exp '>' exp
+                 3  exp '+' exp
+                 4  exp '-' exp
+                 5  exp '^' exp
+                 6  exp '=' exp
+                 7  "exp"
        exp derives
-               1: exp '<' exp
-               2: exp '>' exp
-               3: exp '+' exp
-               4: exp '-' exp
-               5: exp '^' exp
-               6: exp '=' exp
-               7: "exp"
+                 1  exp '<' exp
+                 2  exp '>' exp
+                 3  exp '+' exp
+                 4  exp '-' exp
+                 5  exp '^' exp
+                 6  exp '=' exp
+                 7  "exp"
+]])
+
+AT_CLEANUP
+
+
+
+
+## -------- ##
+## Accept.  ##
+## -------- ##
+
+# In some weird cases Bison could compute an incorrect final state
+# number.  This happens only if the $end token is used in the user
+# grammar, which is a very suspicious accidental feature introduced as
+# a side effect of allowing the user to name $end using `%token END 0
+# "end of file"'.
+
+AT_SETUP([Accept])
+
+AT_DATA([input.y],
+[[%token END 0
+%%
+input:
+  'a'
+| '(' input ')'
+| '(' error END
+;
 ]])
 
+AT_BISON_CHECK([[-v -o input.c input.y]])
+
+# Get the final state in the parser.
+AT_CHECK([[sed -n 's/.*define YYFINAL *\([0-9][0-9]*\)/final state \1/p' input.c]],
+         0, [stdout])
+mv stdout expout
+
+# Get the final state in the report, from the "accept" action..
+AT_CHECK([sed -n '
+           /^state \(.*\)/{
+            s//final state \1/
+            x
+          }
+          / accept/{
+            x
+            p
+            q
+          }
+       ' input.output],
+       0, [expout])
+
 AT_CLEANUP