X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1565b72064b66f8aa0e8bdb474cab810192537d0..cb3f7f335aa69ba3e6478fea8d4591f4f6d43bc5:/tests/sets.at?ds=sidebyside

diff --git a/tests/sets.at b/tests/sets.at
index 0cbc3da6..178a47c2 100644
--- a/tests/sets.at
+++ b/tests/sets.at
@@ -1,20 +1,20 @@
 # Exercising Bison Grammar Sets.                      -*- Autotest -*-
-# Copyright (C) 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
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
+# Copyright (C) 2001, 2002, 2005, 2007, 2009, 2010 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
+# 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)
@@ -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,32 +78,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
-		$axiom
+	$accept firsts
+		$accept
 		e
 	e firsts
 		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
@@ -162,7 +162,7 @@ g: h;
 h: 'h';
 ]])
 
-AT_CHECK([[bison --trace input.y]], [], [], [stderr])
+AT_BISON_CHECK([[--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,47 +208,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
-		$axiom
+	$accept firsts
+		$accept
 		exp
 	exp firsts
 		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