From 1565b72064b66f8aa0e8bdb474cab810192537d0 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 6 May 2002 08:42:24 +0000 Subject: [PATCH] * src/closure.c (print_firsts): Display of the symbol tags. (bitmatrix_print): Move to... * lib/bitsetv-print.h, lib/bitsetv-print.c (bitsetv_matrix_dump): here. * tests/sets.at (Nullable, Broken Closure, Firsts): Adjust. --- ChangeLog | 8 +++++ lib/Makefile.am | 4 +++ lib/bitsetv-print.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ lib/bitsetv-print.h | 28 +++++++++++++++++ src/closure.c | 57 +++------------------------------- tests/sets.at | 18 +++++------ 6 files changed, 128 insertions(+), 61 deletions(-) create mode 100644 lib/bitsetv-print.c create mode 100644 lib/bitsetv-print.h diff --git a/ChangeLog b/ChangeLog index 2953cb37..8e8530c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2002-05-06 Akim Demaille + + * src/closure.c (print_firsts): Display of the symbol tags. + (bitmatrix_print): Move to... + * lib/bitsetv-print.h, lib/bitsetv-print.c (bitsetv_matrix_dump): + here. + * tests/sets.at (Nullable, Broken Closure, Firsts): Adjust. + 2002-05-06 Akim Demaille * src/muscle_tab.c (muscle_m4_output): Must return TRUE for diff --git a/lib/Makefile.am b/lib/Makefile.am index d8655103..b2de1616 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -49,5 +49,9 @@ libbison_a_SOURCES += \ bitset-int.h bitset.h bitsetv.h ebitset.h lbitset.h sbitset.h \ bitset.c bitsetv.c ebitset.c lbitset.c sbitset.c +# Additional bitset operations. +libbison_a_SOURCES += \ + bitsetv-print.h bitsetv-print.c + libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@ libbison_a_DEPENDENCIES = $(libbison_a_LIBADD) diff --git a/lib/bitsetv-print.c b/lib/bitsetv-print.c new file mode 100644 index 00000000..4ecbb2a0 --- /dev/null +++ b/lib/bitsetv-print.c @@ -0,0 +1,74 @@ +/* Bitset vectors. + Copyright (C) 2001 Free Software Foundation, Inc. + +This file is part of Bison. + +Bison 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. + +Bison 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 Bison; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "bitsetv-print.h" + +/*--------------------------------------------------------. +| Display the MATRIX array of SIZE bitsets of size SIZE. | +`--------------------------------------------------------*/ + +void +bitsetv_matrix_dump (FILE * out, const char *title, bitsetv bset) +{ + size_t i, j; + size_t hsize = bitset_size (bset[0]); + + /* Title. */ + fprintf (out, "%s BEGIN\n", title); + + /* Column numbers. */ + fputs (" ", out); + for (i = 0; i < hsize; ++i) + putc (i / 10 ? '0' + i / 10 : ' ', out); + putc ('\n', out); + fputs (" ", out); + for (i = 0; i < hsize; ++i) + fprintf (out, "%d", i % 10); + putc ('\n', out); + + /* Bar. */ + fputs (" .", out); + for (i = 0; i < hsize; ++i) + putc ('-', out); + fputs (".\n", out); + + /* Contents. */ + for (i = 0; bset[i]; ++i) + { + fprintf (out, "%2d|", i); + for (j = 0; j < hsize; ++j) + fputs (bitset_test (bset[i], j) ? "1" : " ", out); + fputs ("|\n", out); + } + + /* Bar. */ + fputs (" `", out); + for (i = 0; i < hsize; ++i) + putc ('-', out); + fputs ("'\n", out); + + /* End title. */ + fprintf (out, "%s END\n\n", title); +} diff --git a/lib/bitsetv-print.h b/lib/bitsetv-print.h new file mode 100644 index 00000000..b3e71fce --- /dev/null +++ b/lib/bitsetv-print.h @@ -0,0 +1,28 @@ +/* Bitset vectors. + Copyright (C) 2002 Free Software Foundation, Inc. + Contributed by Akim Demaille (akim@freefriends.org). + +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 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. */ + +#ifndef _BITSETV_PRINT_H +#define _BITSETV_PRINT_H + +#include "bitsetv.h" + +/* Dump vector of bitsets as a matrix. */ +extern void bitsetv_matrix_dump PARAMS ((FILE *, const char *, + bitsetv)); + +#endif /* _BITSETV_H */ diff --git a/src/closure.c b/src/closure.c index 738ecaa8..928b6867 100644 --- a/src/closure.c +++ b/src/closure.c @@ -22,6 +22,7 @@ #include "quotearg.h" #include "bitset.h" #include "bitsetv.h" +#include "bitsetv-print.h" #include "getargs.h" #include "symtab.h" #include "gram.h" @@ -78,8 +79,7 @@ print_firsts (void) quotearg_style (escape_quoting_style, symbols[i]->tag)); for (j = 0; j < nvars; j++) if (bitset_test (FIRSTS (i), j)) - fprintf (stderr, "\t\t%d (%s)\n", - j + ntokens, + fprintf (stderr, "\t\t%s\n", quotearg_style (escape_quoting_style, symbols[j + ntokens]->tag)); } @@ -111,54 +111,6 @@ print_fderives (void) } fprintf (stderr, "\n\n"); } - -/*--------------------------------------------------------. -| Display the MATRIX array of SIZE bitsets of size SIZE. | -`--------------------------------------------------------*/ - -static void -bitmatrix_print (const char *title, bitsetv matrix) -{ - size_t i, j; - size_t size = bitset_size (matrix[0]); - - /* Title. */ - fprintf (stderr, "%s BEGIN\n", title); - - /* Column numbers. */ - fputs (" ", stderr); - for (i = 0; i < size; ++i) - putc (i / 10 ? '0' + i / 10 : ' ', stderr); - putc ('\n', stderr); - fputs (" ", stderr); - for (i = 0; i < size; ++i) - fprintf (stderr, "%d", i % 10); - putc ('\n', stderr); - - /* Bar. */ - fputs (" .", stderr); - for (i = 0; i < size; ++i) - putc ('-', stderr); - fputs (".\n", stderr); - - /* Contents. */ - for (i = 0; i < size; ++i) - { - fprintf (stderr, "%2d|", i); - for (j = 0; j < size; ++j) - fputs (bitset_test (matrix[i], j) ? "1" : " ", stderr); - fputs ("|\n", stderr); - } - - /* Bar. */ - fputs (" `", stderr); - for (i = 0; i < size; ++i) - putc ('-', stderr); - fputs ("'\n", stderr); - - /* End title. */ - fprintf (stderr, "%s END\n\n", title); -} /*------------------------------------------------------------------. | Set FIRSTS to be an NVARS array of NVARS bitsets indicating which | @@ -187,10 +139,10 @@ set_firsts (void) } if (trace_flag) - bitmatrix_print ("RTC: Input", firsts); + bitsetv_matrix_dump (stderr, "RTC: Firsts Input", firsts); bitsetv_reflexive_transitive_closure (firsts); if (trace_flag) - bitmatrix_print ("RTC: Output", firsts); + bitsetv_matrix_dump (stderr, "RTC: Firsts Output", firsts); if (trace_flag) print_firsts (); @@ -226,6 +178,7 @@ set_fderives (void) bitsetv_free (firsts); } + void diff --git a/tests/sets.at b/tests/sets.at index e7f96930..0cbc3da6 100644 --- a/tests/sets.at +++ b/tests/sets.at @@ -92,10 +92,10 @@ NULLABLE e: yes FIRSTS $axiom firsts - 4 ($axiom) - 5 (e) + $axiom + e e firsts - 5 (e) + e FDERIVES $axiom derives 0: e $ @@ -164,8 +164,8 @@ h: 'h'; AT_CHECK([[bison --trace 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 @@ -227,10 +227,10 @@ NULLABLE exp: no FIRSTS $axiom firsts - 10 ($axiom) - 11 (exp) + $axiom + exp exp firsts - 11 (exp) + exp FDERIVES $axiom derives 0: exp $ -- 2.45.2