]> git.saurik.com Git - bison.git/blobdiff - tests/sets.at
Ignore YYSTACK_USE_ALLOCA for push parsers since the stacks can't be
[bison.git] / tests / sets.at
index 28c582494e91ac8fe413857d2fc78fb2e1115264..a731315b231e06386a62f5e5e8cd6f3565e93b85 100644 (file)
@@ -1,5 +1,5 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
-# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2005 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
@@ -13,8 +13,8 @@
 
 # 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
 
 
 # AT_EXTRACT_SETS(INPUT, OUTPUT)
@@ -29,25 +29,25 @@ m4_define([AT_EXTRACT_SETS],
    :null
    p
    n
-   /^[         ]*$/ !b null
+   /^[  ]*$/ !b null
 }
 /^FIRSTS$/ {
    :firsts
    p
    n
-   /^[         ]*$/ !b firsts
+   /^[  ]*$/ !b firsts
 }
 /^FDERIVES$/ {
    :fderiv
    p
    n
-   /^[         ]*$/ !b fderiv
+   /^[  ]*$/ !b fderiv
 }
 /^DERIVES$/ {
    :deriv
    p
    n
-   /^[         ]*$/ !b deriv
+   /^[  ]*$/ !b deriv
 }
 ]])
 AT_CHECK([sed -f extract.sed $1], 0, [stdout])
@@ -78,27 +78,27 @@ AT_DATA([[input.y]],
 e: 'e' | /* Nothing */;
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
-       $axiom derives
-                 0  e $
+       $accept derives
+                 0  e $end
        e derives
                  1  'e'
                  2  /* empty */
 NULLABLE
-       $axiom: no
+       $accept: no
        e: yes
 FIRSTS
-       $axiom firsts
-               $axiom
+       $accept firsts
+               $accept
                e
        e firsts
                e
 FDERIVES
-       $axiom derives
-                 0  e $
+       $accept derives
+                 0  e $end
                  1  'e'
                  2  /* empty */
        e derives
@@ -162,7 +162,7 @@ g: h;
 h: 'h';
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
 
 AT_CHECK([[sed -n 's/[  ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [],
 [[RTC: Firsts Output BEGIN
@@ -208,12 +208,12 @@ exp:
  ;
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_CHECK([[bison --trace=sets input.y]], [], [], [stderr])
 AT_EXTRACT_SETS([stderr], [sets])
 AT_CHECK([[cat sets]], [],
 [[DERIVES
-       $axiom derives
-                 0  exp $
+       $accept derives
+                 0  exp $end
        exp derives
                  1  exp '<' exp
                  2  exp '>' exp
@@ -223,17 +223,17 @@ AT_CHECK([[cat sets]], [],
                  6  exp '=' exp
                  7  "exp"
 NULLABLE
-       $axiom: no
+       $accept: no
        exp: no
 FIRSTS
-       $axiom firsts
-               $axiom
+       $accept firsts
+               $accept
                exp
        exp firsts
                exp
 FDERIVES
-       $axiom derives
-                 0  exp $
+       $accept derives
+                 0  exp $end
                  1  exp '<' exp
                  2  exp '>' exp
                  3  exp '+' exp
@@ -252,3 +252,51 @@ FDERIVES
 ]])
 
 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_CHECK([[bison -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