X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1207eeacc2494f6b0c29b08aa224cf5c892a68f1..792aeb0017e1a060f4bea5730cf29db4f46800ea:/tests/sets.at diff --git a/tests/sets.at b/tests/sets.at index 64402c20..388ee099 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-2012 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 . # 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 - 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 @@ -162,10 +162,10 @@ 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: Output BEGIN/,/^RTC: Output END/p' stderr]], [], -[[RTC: Output BEGIN +AT_CHECK([[sed -n 's/[ ]*$//;/^RTC: Firsts Output BEGIN/,/^RTC: Firsts Output END/p' stderr]], [], +[[RTC: Firsts Output BEGIN 012345678 .---------. @@ -179,7 +179,7 @@ AT_CHECK([[sed -n 's/[ ]*$//;/^RTC: Output BEGIN/,/^RTC: Output END/p' stderr]] 7| 11| 8| 1| `---------' -RTC: Output END +RTC: Firsts Output END ]]) AT_CLEANUP @@ -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 - 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