summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkim Demaille <akim@epita.fr>2001-11-12 09:19:48 +0000
committerAkim Demaille <akim@epita.fr>2001-11-12 09:19:48 +0000
commitbadfc69c2621f5f8439165b9cb0a1c75f5b6e85f (patch)
treef4dc6196c28daea877a6862e2fe8582db23a866d
parentfb28699f95aa1be7e395c2ff7177669b49200c69 (diff)
downloadbison-badfc69c2621f5f8439165b9cb0a1c75f5b6e85f.tar.gz
%expext was not functioning at all.
* src/conflicts.c (expected_conflicts): Set to -1. (conflict_report): Use ngettext. (conflicts_print): Check %expect and make its violation an error. * doc/bison.texinfo (Expect Decl): Adjust. * configure.in (AM_GNU_GETTEXT): Ask for ngettext. * tests/regression.at (%expect not enough, %expect right) (%expect too much): New.
-rw-r--r--ChangeLog12
-rw-r--r--Makefile.in2
-rw-r--r--NEWS15
-rw-r--r--config/Makefile.in2
-rwxr-xr-xconfigure273
-rw-r--r--configure.in6
-rw-r--r--doc/Makefile.in2
-rw-r--r--doc/bison.info212
-rw-r--r--doc/bison.info-12
-rw-r--r--doc/bison.info-317
-rw-r--r--doc/bison.texinfo19
-rw-r--r--doc/stamp-vti2
-rw-r--r--doc/version.texi2
-rw-r--r--lib/Makefile.in2
-rw-r--r--m4/Makefile.in2
-rw-r--r--src/Makefile.in2
-rw-r--r--src/conflicts.c40
-rw-r--r--src/main.c15
-rw-r--r--tests/Makefile.in2
-rw-r--r--tests/regression.at60
20 files changed, 512 insertions, 177 deletions
diff --git a/ChangeLog b/ChangeLog
index 8db50215..73ff8f63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2001-11-12 Akim Demaille <akim@epita.fr>
+ %expext was not functioning at all.
+
+ * src/conflicts.c (expected_conflicts): Set to -1.
+ (conflict_report): Use ngettext.
+ (conflicts_print): Check %expect and make its violation an error.
+ * doc/bison.texinfo (Expect Decl): Adjust.
+ * configure.in (AM_GNU_GETTEXT): Ask for ngettext.
+ * tests/regression.at (%expect not enough, %expect right)
+ (%expect too much): New.
+
+2001-11-12 Akim Demaille <akim@epita.fr>
+
* tests/regression.at (Conflicts): Rename as...
(Unresolved SR Conflicts): this.
(Solved SR Conflicts): New.
diff --git a/Makefile.in b/Makefile.in
index 78b1cc10..4a73077a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/NEWS b/NEWS
index fa0ac5ee..308bb492 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,21 @@ Bison News
Changes in version 1.30b:
+* Fixed parser memory leaks.
+ When the generated parser was using malloc to extend its stacks, the
+ previous allocations were not freed.
+
+* Fixed verbose output file.
+ Some newlines were missing.
+ Some conflicts in state descriptions were missing.
+
+* Fixed conflict report.
+ Option -v was needed to get the result.
+
+* %expect
+ Was not used.
+ Mismatches are errors, not warnings.
+
* Fixed incorrect processing of some invalid input.
* Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.
diff --git a/config/Makefile.in b/config/Makefile.in
index 49072ba4..99b15f97 100644
--- a/config/Makefile.in
+++ b/config/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/configure b/configure
index 77a79e19..23c7b360 100755
--- a/configure
+++ b/configure
@@ -15,6 +15,7 @@ else
as_expr=false
fi
+
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
@@ -60,6 +61,7 @@ fi
{ $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
{ LC_MESSAGES=C; export LC_MESSAGES; }
+
# Name of the executable.
as_me=`(basename "$0") 2>/dev/null ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
@@ -93,6 +95,7 @@ if test "${PATH_SEPARATOR+set}" != set; then
rm -f conftest.sh
fi
+
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
@@ -177,6 +180,7 @@ done
exit
}
+
case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
*c*,-n*) ECHO_N= ECHO_C='
' ECHO_T=' ' ;;
@@ -216,6 +220,7 @@ as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
@@ -225,6 +230,7 @@ IFS=" $as_nl"
# CDPATH.
$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; }
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
# so uname gets run too.
@@ -284,6 +290,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
+
# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
@@ -679,6 +686,7 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
@@ -971,12 +979,14 @@ done
cat >&5 <<_ACEOF
+
## ----------- ##
## Core tests. ##
## ----------- ##
_ACEOF
+
# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell meta-characters.
@@ -1149,6 +1159,31 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ac_aux_dir=
for ac_dir in config $srcdir/config; do
if test -f $ac_dir/install-sh; then
@@ -1174,6 +1209,7 @@ ac_config_guess="$SHELL $ac_aux_dir/config.guess"
ac_config_sub="$SHELL $ac_aux_dir/config.sub"
ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -1228,6 +1264,7 @@ case $as_dir/ in
esac
done
+
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL=$ac_cv_path_install
@@ -1308,6 +1345,7 @@ _ACEOF
program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
rm conftest.sed
+
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
@@ -1401,6 +1439,7 @@ if test "x$enable_dependency_tracking" != xno; then
AMDEPBACKSLASH='\'
fi
+
if test "x$enable_dependency_tracking" != xno; then
AMDEP_TRUE=
AMDEP_FALSE='#'
@@ -1409,6 +1448,7 @@ else
AMDEP_FALSE=
fi
+
rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
@@ -1419,6 +1459,7 @@ else
fi
rmdir .deps 2>/dev/null
+
# test to see if srcdir already configured
if test "`cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
@@ -1435,22 +1476,30 @@ cat >>confdefs.h <<_ACEOF
#define PACKAGE "$PACKAGE"
_ACEOF
+
cat >>confdefs.h <<_ACEOF
#define VERSION "$VERSION"
_ACEOF
+
+
# Some tools Automake needs.
ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"}
+
AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"}
+
AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
AMTAR=${AMTAR-"${am_missing_run}tar"}
install_sh=${install_sh-"$am_aux_dir/install-sh"}
@@ -1464,17 +1513,23 @@ INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
# along with our hook.
ac_config_headers="$ac_config_headers config.h:config.hin"
+
+
+
# Initialize the test suite.
ac_config_commands="$ac_config_commands tests/package.m4"
+
ac_config_commands="$ac_config_commands tests/atconfig"
+
ac_config_files="$ac_config_files tests/bison"
ac_config_files="$ac_config_files tests/Makefile tests/atlocal"
# Needed by tests/atlocal.in.
+
# Checks for programs.
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -1786,6 +1841,7 @@ fi
fi
+
test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable cc found in \$PATH" >&5
echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
@@ -2230,6 +2286,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
ac_config_commands="$ac_config_commands depfiles"
+
am_make=${MAKE-make}
cat > confinc << 'END'
doit:
@@ -2263,10 +2320,12 @@ if test "$am__include" = "#"; then
fi
fi
+
echo "$as_me:$LINENO: result: $_am_result" >&5
echo "${ECHO_T}$_am_result" >&6
rm -f confinc confmf
+
depcc="$CC" am_compiler_list=
echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
@@ -2335,6 +2394,8 @@ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2535,6 +2596,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
echo "$as_me:$LINENO: checking for ANSI C header files" >&5
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
if test "${ac_cv_header_stdc+set}" = set; then
@@ -2676,6 +2738,14 @@ fi
# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h
do
@@ -2723,6 +2793,7 @@ fi
done
+
if test "${ac_cv_header_minix_config_h+set}" = set; then
echo "$as_me:$LINENO: checking for minix/config.h" >&5
echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
@@ -2830,22 +2901,26 @@ else
MINIX=
fi
+
if test "$MINIX" = yes; then
cat >>confdefs.h <<\_ACEOF
#define _POSIX_SOURCE 1
_ACEOF
+
cat >>confdefs.h <<\_ACEOF
#define _POSIX_1_SOURCE 2
_ACEOF
+
cat >>confdefs.h <<\_ACEOF
#define _MINIX 1
_ACEOF
fi
+
echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
if test "${ac_cv_lib_cposix_strerror+set}" = set; then
@@ -2905,6 +2980,11 @@ if test $ac_cv_lib_cposix_strerror = yes; then
LIBS="$LIBS -lcposix"
fi
+
+
+
+
+
echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5
echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6
if test "${am_cv_prog_cc_stdc+set}" = set; then
@@ -3085,8 +3165,10 @@ else
RANLIB="$ac_cv_prog_RANLIB"
fi
+
AUTOM4TE=${AUTOM4TE-"${am_missing_run}autom4te"}
+
# Check whether --enable-gcc-warnings or --disable-gcc-warnings was given.
if test "${enable_gcc_warnings+set}" = set; then
enableval="$enable_gcc_warnings"
@@ -3661,6 +3743,7 @@ cat >>confdefs.h <<\_ACEOF
#define _GNU_SOURCE 1
_ACEOF
+
# Checks for header files.
echo "$as_me:$LINENO: checking for ANSI C header files" >&5
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
@@ -3801,6 +3884,12 @@ _ACEOF
fi
+
+
+
+
+
+
for ac_header in ctype.h locale.h memory.h stdlib.h string.h unistd.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -3914,6 +4003,7 @@ fi
done
+
# Checks for typedefs.
# Checks for structures.
@@ -4167,6 +4257,8 @@ _ACEOF
;;
esac
+
+
echo "$as_me:$LINENO: checking for function prototypes" >&5
echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6
if test "$am_cv_prog_cc_stdc" != no; then
@@ -4323,6 +4415,7 @@ _ACEOF
fi
+
for ac_header in string.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -4436,6 +4529,8 @@ fi
done
+
+
# Checks for library functions.
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
@@ -4576,6 +4671,7 @@ cat >>confdefs.h <<\_ACEOF
#define C_ALLOCA 1
_ACEOF
+
echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6
if test "${ac_cv_os_cray+set}" = set; then
@@ -4741,8 +4837,11 @@ cat >>confdefs.h <<_ACEOF
#define STACK_DIRECTION $ac_cv_c_stack_direction
_ACEOF
+
fi
+
+
for ac_func in mkstemp setlocale
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -4872,11 +4971,13 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STPCPY 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STPCPY 0
_ACEOF
+
fi
echo "$as_me:$LINENO: checking whether strndup is declared" >&5
echo $ECHO_N "checking whether strndup is declared... $ECHO_C" >&6
@@ -4932,11 +5033,13 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRNDUP 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRNDUP 0
_ACEOF
+
fi
echo "$as_me:$LINENO: checking whether strnlen is declared" >&5
echo $ECHO_N "checking whether strnlen is declared... $ECHO_C" >&6
@@ -4992,11 +5095,13 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRNLEN 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRNLEN 0
_ACEOF
+
fi
echo "$as_me:$LINENO: checking whether memchr is declared" >&5
echo $ECHO_N "checking whether memchr is declared... $ECHO_C" >&6
@@ -5052,13 +5157,21 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_MEMCHR 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_MEMCHR 0
_ACEOF
+
fi
+
+
+
+
+
+
for ac_func in stpcpy strndup strnlen strspn memchr
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -5136,10 +5249,14 @@ else
fi
done
+
+
+
cat >>confdefs.h <<\_ACEOF
#define HAVE_DONE_WORKING_MALLOC_CHECK 1
_ACEOF
+
echo "$as_me:$LINENO: checking for working malloc" >&5
echo $ECHO_N "checking for working malloc... $ECHO_C" >&6
if test "${jm_cv_func_working_malloc+set}" = set; then
@@ -5194,10 +5311,13 @@ _ACEOF
fi
+
+
cat >>confdefs.h <<\_ACEOF
#define HAVE_DONE_WORKING_REALLOC_CHECK 1
_ACEOF
+
echo "$as_me:$LINENO: checking for working realloc" >&5
echo $ECHO_N "checking for working realloc... $ECHO_C" >&6
if test "${jm_cv_func_working_realloc+set}" = set; then
@@ -5252,6 +5372,10 @@ _ACEOF
fi
+
+
+
+
for ac_func in isascii iswprint mbsinit
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -5327,6 +5451,7 @@ _ACEOF
fi
done
+
echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5
echo $ECHO_N "checking whether mbrtowc and mbstate_t are properly declared... $ECHO_C" >&6
if test "${jm_cv_func_mbrtowc+set}" = set; then
@@ -5380,6 +5505,12 @@ _ACEOF
fi
+
+
+
+
+
+
for ac_header in limits.h stddef.h stdlib.h string.h wchar.h wctype.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -5632,6 +5763,7 @@ _ACEOF
fi
+
echo "$as_me:$LINENO: checking whether backslash-a works in strings" >&5
echo $ECHO_N "checking whether backslash-a works in strings... $ECHO_C" >&6
if test "${ac_cv_c_backslash_a+set}" = set; then
@@ -5692,6 +5824,8 @@ _ACEOF
fi
+
+
for ac_header in stdlib.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -5805,6 +5939,7 @@ fi
done
+
echo "$as_me:$LINENO: checking for mbstate_t" >&5
echo $ECHO_N "checking for mbstate_t... $ECHO_C" >&6
if test "${ac_cv_type_mbstate_t+set}" = set; then
@@ -5862,6 +5997,7 @@ _ACEOF
fi
+
echo "$as_me:$LINENO: checking for function prototypes" >&5
echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6
if test "$am_cv_prog_cc_stdc" != no; then
@@ -6018,6 +6154,7 @@ _ACEOF
fi
+
for ac_header in string.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -6131,6 +6268,12 @@ fi
done
+
+
+
+
+
+
for ac_func in strerror vprintf doprnt
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -6260,13 +6403,16 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRERROR 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRERROR 0
_ACEOF
+
fi
+
echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5
echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6
if test "${ac_cv_have_decl_strerror_r+set}" = set; then
@@ -6321,13 +6467,17 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRERROR_R 1
_ACEOF
+
else
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_STRERROR_R 0
_ACEOF
+
fi
+
+
for ac_func in strerror_r
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -6653,6 +6803,7 @@ _ACEOF
fi
+
echo "$as_me:$LINENO: checking if malloc debugging is wanted" >&5
echo $ECHO_N "checking if malloc debugging is wanted... $ECHO_C" >&6
@@ -6678,6 +6829,7 @@ else
echo "${ECHO_T}no" >&6
fi;
+
ALL_LINGUAS="de es et fr ja nl tr ru"
# Make sure we can run config.sub.
$ac_config_sub sun4 >/dev/null 2>&1 ||
@@ -6710,6 +6862,7 @@ build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
echo "$as_me:$LINENO: checking host system type" >&5
echo $ECHO_N "checking host system type... $ECHO_C" >&6
if test "${ac_cv_host+set}" = set; then
@@ -6731,6 +6884,7 @@ host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
echo "$as_me:$LINENO: checking for off_t" >&5
echo $ECHO_N "checking for off_t... $ECHO_C" >&6
if test "${ac_cv_type_off_t+set}" = set; then
@@ -6847,6 +7001,8 @@ _ACEOF
fi
+
+
for ac_header in stdlib.h unistd.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -6960,6 +7116,7 @@ fi
done
+
for ac_func in getpagesize
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -7203,6 +7360,7 @@ _ACEOF
fi
rm -f conftest.mmap
+
echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6
if test "${ac_cv_gnu_library_2_1+set}" = set; then
@@ -7228,12 +7386,26 @@ else
fi
rm -f conftest*
+
+
fi
echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6
GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+
+
+
+
+
+
+
+
+
for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
stdlib.h string.h unistd.h sys/param.h
do
@@ -7348,6 +7520,27 @@ fi
done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
for ac_func in feof_unlocked fgets_unlocked getcwd getegid geteuid \
getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
strdup strtoul tsearch __argz_count __argz_stringify __argz_next
@@ -7425,6 +7618,10 @@ _ACEOF
fi
done
+
+
+
+
# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given.
if test "${with_libiconv_prefix+set}" = set; then
withval="$with_libiconv_prefix"
@@ -7612,6 +7809,8 @@ _ACEOF
LIBICONV="-liconv"
fi
+
+
echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
if test "${am_cv_langinfo_codeset+set}" = set; then
@@ -7732,6 +7931,7 @@ fi;
echo "$as_me:$LINENO: result: $USE_NLS" >&5
echo "${ECHO_T}$USE_NLS" >&6
+
BUILD_INCLUDED_LIBINTL=no
USE_INCLUDED_LIBINTL=no
INTLLIBS=
@@ -7759,6 +7959,9 @@ echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6
if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
CATOBJEXT=NONE
+
+
+
if test "${ac_cv_header_libintl_h+set}" = set; then
echo "$as_me:$LINENO: checking for libintl.h" >&5
echo $ECHO_N "checking for libintl.h... $ECHO_C" >&6
@@ -7863,7 +8066,7 @@ fi
if test $ac_cv_header_libintl_h = yes; then
echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
-if test "${gt_cv_func_gnugettext1_libc+set}" = set; then
+if test "${gt_cv_func_gnugettext2_libc+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
@@ -7881,7 +8084,7 @@ int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr
+return (int) gettext ("") + (int) ngettext ("", "", 0) + _nl_msg_cat_cntr
;
return 0;
}
@@ -7898,21 +8101,21 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- gt_cv_func_gnugettext1_libc=yes
+ gt_cv_func_gnugettext2_libc=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-gt_cv_func_gnugettext1_libc=no
+gt_cv_func_gnugettext2_libc=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext2_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext2_libc" >&6
- if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
+ if test "$gt_cv_func_gnugettext2_libc" != "yes"; then
echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6
-if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then
+if test "${gt_cv_func_gnugettext2_libintl+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
gt_save_LIBS="$LIBS"
@@ -7932,7 +8135,7 @@ int
main ()
{
bindtextdomain ("", "");
-return (int) gettext ("") + _nl_msg_cat_cntr
+return (int) gettext ("") + (int) ngettext ("", "", 0) + _nl_msg_cat_cntr
;
return 0;
}
@@ -7949,28 +8152,29 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- gt_cv_func_gnugettext1_libintl=yes
+ gt_cv_func_gnugettext2_libintl=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-gt_cv_func_gnugettext1_libintl=no
+gt_cv_func_gnugettext2_libintl=no
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS="$gt_save_LIBS"
fi
-echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
-echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext2_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext2_libintl" >&6
fi
- if test "$gt_cv_func_gnugettext1_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \
+ if test "$gt_cv_func_gnugettext2_libc" = "yes" \
+ || { test "$gt_cv_func_gnugettext2_libintl" = "yes" \
&& test "$PACKAGE" != gettext; }; then
cat >>confdefs.h <<\_ACEOF
#define HAVE_GETTEXT 1
_ACEOF
- if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then
+
+ if test "$gt_cv_func_gnugettext2_libintl" = "yes"; then
INTLLIBS="-lintl $LIBICONV"
fi
@@ -8130,6 +8334,7 @@ else
echo "${ECHO_T}no" >&6
fi
+
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
@@ -8166,11 +8371,14 @@ else
echo "${ECHO_T}no" >&6
fi
+
CATOBJEXT=.gmo
fi
fi
+
+
if test "$CATOBJEXT" = "NONE"; then
nls_cv_use_gnu_gettext=yes
fi
@@ -8290,6 +8498,7 @@ else
echo "${ECHO_T}no" >&6
fi
+
BUILD_INCLUDED_LIBINTL=yes
USE_INCLUDED_LIBINTL=yes
CATOBJEXT=.gmo
@@ -8321,6 +8530,8 @@ echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
fi
ac_config_commands="$ac_config_commands default-1"
+
+
if test "$PACKAGE" = gettext; then
BUILD_INCLUDED_LIBINTL=yes
fi
@@ -8389,15 +8600,29 @@ echo "${ECHO_T}$ac_prog_version" >&6
POFILES="$POFILES $lang.po"
done
+
+
+
+
+
+
+
+
+
+
nls_cv_header_intl=
nls_cv_header_libgt=
DATADIRNAME=share
+
INSTOBJEXT=.mo
+
GENCAT=gencat
+
+
if test "x$CATOBJEXT" != "x"; then
if test "x$ALL_LINGUAS" = "x"; then
LINGUAS=
@@ -8439,12 +8664,16 @@ echo "${ECHO_T}$LINGUAS" >&6
MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
fi
+
INTL_LIBTOOL_SUFFIX_PREFIX=
+
+
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+
ac_config_files="$ac_config_files Makefile config/Makefile intl/Makefile po/Makefile.in lib/Makefile src/Makefile doc/Makefile m4/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -8522,6 +8751,7 @@ fi
DEFS=-DHAVE_CONFIG_H
+
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -8585,6 +8815,7 @@ fi
{ $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } ||
{ LC_MESSAGES=C; export LC_MESSAGES; }
+
# Name of the executable.
as_me=`(basename "$0") 2>/dev/null ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
@@ -8618,6 +8849,7 @@ if test "${PATH_SEPARATOR+set}" != set; then
rm -f conftest.sh
fi
+
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
@@ -8704,6 +8936,7 @@ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;
exit
}
+
case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
*c*,-n*) ECHO_N= ECHO_C='
' ECHO_T=' ' ;;
@@ -8743,6 +8976,7 @@ as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
# Sed expression to map a string onto a valid variable name.
as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
@@ -8919,8 +9153,11 @@ PACKAGE_BUGREPORT='$PACKAGE_BUGREPORT'
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
_ACEOF
+
+
cat >>$CONFIG_STATUS <<\_ACEOF
for ac_config_target in $ac_config_targets
do
@@ -9214,6 +9451,7 @@ ac_top_buildpath=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
ac_srcpath=`cd "$ac_dir" && cd $ac_srcdir && pwd`
ac_top_srcpath=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
*) ac_INSTALL=$ac_top_builddir$INSTALL ;;
@@ -9570,6 +9808,7 @@ ac_top_buildpath=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
ac_srcpath=`cd "$ac_dir" && cd $ac_srcdir && pwd`
ac_top_srcpath=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
{ echo "$as_me:$LINENO: executing $ac_dest commands" >&5
echo "$as_me: executing $ac_dest commands" >&6;}
case $ac_dest in
@@ -9719,6 +9958,7 @@ _ACEOF
chmod +x $CONFIG_STATUS
ac_clean_files=$ac_clean_files_save
+
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
@@ -9736,3 +9976,4 @@ if test "$no_create" != yes; then
# would make configure fail if this is the last instruction.
$ac_cs_success || { (exit 1); exit 1; }
fi
+
diff --git a/configure.in b/configure.in
index 524f9891..6dc21cb1 100644
--- a/configure.in
+++ b/configure.in
@@ -90,12 +90,12 @@ jm_PREREQ_ERROR
AM_WITH_DMALLOC
ALL_LINGUAS="de es et fr ja nl tr ru"
-AM_GNU_GETTEXT
+AM_GNU_GETTEXT(, need-ngettext)
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
-LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
-AC_SUBST(LIBOBJS)
+LIB@&t@OBJS=`echo $LIB@&t@OBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+AC_SUBST(LIB@&t@OBJS)
AC_OUTPUT([Makefile
config/Makefile
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 04a3a2fb..d7affd51 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/doc/bison.info b/doc/bison.info
index 4cf67b8d..8cde7afa 100644
--- a/doc/bison.info
+++ b/doc/bison.info
@@ -31,115 +31,115 @@ instead of in the original English.

Indirect:
bison.info-1: 1313
-bison.info-2: 50689
-bison.info-3: 100579
-bison.info-4: 147579
-bison.info-5: 197449
+bison.info-2: 50690
+bison.info-3: 100580
+bison.info-4: 147602
+bison.info-5: 197472

Tag Table:
(Indirect)
Node: Top1313
-Node: Introduction8967
-Node: Conditions10242
-Node: Copying11706
-Node: Concepts30909
-Node: Language and Grammar31988
-Node: Grammar in Bison37004
-Node: Semantic Values38928
-Node: Semantic Actions41029
-Node: Locations Overview42218
-Node: Bison Parser43665
-Node: Stages45977
-Node: Grammar Layout47260
-Node: Examples48517
-Node: RPN Calc49715
-Node: Rpcalc Decls50689
-Node: Rpcalc Rules52276
-Node: Rpcalc Input54076
-Node: Rpcalc Line55537
-Node: Rpcalc Expr56652
-Node: Rpcalc Lexer58597
-Node: Rpcalc Main61169
-Node: Rpcalc Error61567
-Node: Rpcalc Gen62575
-Node: Rpcalc Compile63724
-Node: Infix Calc64599
-Node: Simple Error Recovery67306
-Node: Location Tracking Calc69195
-Node: Ltcalc Decls69925
-Node: Ltcalc Rules70834
-Node: Ltcalc Lexer72895
-Node: Multi-function Calc75233
-Node: Mfcalc Decl76800
-Node: Mfcalc Rules78823
-Node: Mfcalc Symtab80203
-Node: Exercises86576
-Node: Grammar File87082
-Node: Grammar Outline87930
-Node: C Declarations88664
-Node: Bison Declarations89244
-Node: Grammar Rules89656
-Node: C Code90116
-Node: Symbols91046
-Node: Rules96127
-Node: Recursion97766
-Node: Semantics99485
-Node: Value Type100579
-Node: Multiple Types101251
-Node: Actions102268
-Node: Action Types105053
-Node: Mid-Rule Actions106356
-Node: Locations111926
-Node: Location Type112574
-Node: Actions and Locations113132
-Node: Location Default Action115288
-Node: Declarations116751
-Node: Token Decl118070
-Node: Precedence Decl120083
-Node: Union Decl121634
-Node: Type Decl122478
-Node: Expect Decl123384
-Node: Start Decl124930
-Node: Pure Decl125308
-Node: Decl Summary126985
-Node: Multiple Parsers133113
-Node: Interface134607
-Node: Parser Function135479
-Node: Lexical136314
-Node: Calling Convention137720
-Node: Token Values140491
-Node: Token Positions141640
-Node: Pure Calling142525
-Node: Error Reporting145457
-Node: Action Features147579
-Node: Algorithm150874
-Node: Look-Ahead153167
-Node: Shift/Reduce155299
-Node: Precedence158211
-Node: Why Precedence158862
-Node: Using Precedence160727
-Node: Precedence Examples161695
-Node: How Precedence162396
-Node: Contextual Precedence163545
-Node: Parser States165336
-Node: Reduce/Reduce166579
-Node: Mystery Conflicts170140
-Node: Stack Overflow173526
-Node: Error Recovery174899
-Node: Context Dependency180035
-Node: Semantic Tokens180883
-Node: Lexical Tie-ins183900
-Node: Tie-in Recovery185448
-Node: Debugging187620
-Node: Invocation190921
-Node: Bison Options192173
-Node: Environment Variables195723
-Node: Option Cross Key196571
-Node: VMS Invocation197449
-Node: Table of Symbols198233
-Node: Glossary206201
-Node: Copying This Manual212505
-Node: GNU Free Documentation License212714
-Node: Index232579
+Node: Introduction8968
+Node: Conditions10243
+Node: Copying11707
+Node: Concepts30910
+Node: Language and Grammar31989
+Node: Grammar in Bison37005
+Node: Semantic Values38929
+Node: Semantic Actions41030
+Node: Locations Overview42219
+Node: Bison Parser43666
+Node: Stages45978
+Node: Grammar Layout47261
+Node: Examples48518
+Node: RPN Calc49716
+Node: Rpcalc Decls50690
+Node: Rpcalc Rules52277
+Node: Rpcalc Input54077
+Node: Rpcalc Line55538
+Node: Rpcalc Expr56653
+Node: Rpcalc Lexer58598
+Node: Rpcalc Main61170
+Node: Rpcalc Error61568
+Node: Rpcalc Gen62576
+Node: Rpcalc Compile63725
+Node: Infix Calc64600
+Node: Simple Error Recovery67307
+Node: Location Tracking Calc69196
+Node: Ltcalc Decls69926
+Node: Ltcalc Rules70835
+Node: Ltcalc Lexer72896
+Node: Multi-function Calc75234
+Node: Mfcalc Decl76801
+Node: Mfcalc Rules78824
+Node: Mfcalc Symtab80204
+Node: Exercises86577
+Node: Grammar File87083
+Node: Grammar Outline87931
+Node: C Declarations88665
+Node: Bison Declarations89245
+Node: Grammar Rules89657
+Node: C Code90117
+Node: Symbols91047
+Node: Rules96128
+Node: Recursion97767
+Node: Semantics99486
+Node: Value Type100580
+Node: Multiple Types101252
+Node: Actions102269
+Node: Action Types105054
+Node: Mid-Rule Actions106357
+Node: Locations111927
+Node: Location Type112575
+Node: Actions and Locations113133
+Node: Location Default Action115289
+Node: Declarations116752
+Node: Token Decl118071
+Node: Precedence Decl120084
+Node: Union Decl121635
+Node: Type Decl122479
+Node: Expect Decl123385
+Node: Start Decl124953
+Node: Pure Decl125331
+Node: Decl Summary127008
+Node: Multiple Parsers133136
+Node: Interface134630
+Node: Parser Function135502
+Node: Lexical136337
+Node: Calling Convention137743
+Node: Token Values140514
+Node: Token Positions141663
+Node: Pure Calling142548
+Node: Error Reporting145480
+Node: Action Features147602
+Node: Algorithm150897
+Node: Look-Ahead153190
+Node: Shift/Reduce155322
+Node: Precedence158234
+Node: Why Precedence158885
+Node: Using Precedence160750
+Node: Precedence Examples161718
+Node: How Precedence162419
+Node: Contextual Precedence163568
+Node: Parser States165359
+Node: Reduce/Reduce166602
+Node: Mystery Conflicts170163
+Node: Stack Overflow173549
+Node: Error Recovery174922
+Node: Context Dependency180058
+Node: Semantic Tokens180906
+Node: Lexical Tie-ins183923
+Node: Tie-in Recovery185471
+Node: Debugging187643
+Node: Invocation190944
+Node: Bison Options192196
+Node: Environment Variables195746
+Node: Option Cross Key196594
+Node: VMS Invocation197472
+Node: Table of Symbols198256
+Node: Glossary206224
+Node: Copying This Manual212528
+Node: GNU Free Documentation License212737
+Node: Index232602

End Tag Table
diff --git a/doc/bison.info-1 b/doc/bison.info-1
index ff8b5b95..7f973cd6 100644
--- a/doc/bison.info-1
+++ b/doc/bison.info-1
@@ -34,7 +34,7 @@ File: bison.info, Node: Top, Next: Introduction, Up: (dir)
Bison
*****
- This manual documents version 1.30b of Bison, updated 5 November
+ This manual documents version 1.30b of Bison, updated 12 November
2001.
* Menu:
diff --git a/doc/bison.info-3 b/doc/bison.info-3
index 33e4a5da..72b2a2ac 100644
--- a/doc/bison.info-3
+++ b/doc/bison.info-3
@@ -623,19 +623,20 @@ Suppressing Conflict Warnings
Bison normally warns if there are any conflicts in the grammar
(*note Shift/Reduce Conflicts: Shift/Reduce.), but most real grammars
-have harmless shift/reduce conflicts which are resolved in a
-predictable way and would be difficult to eliminate. It is desirable
-to suppress the warning about these conflicts unless the number of
-conflicts changes. You can do this with the `%expect' declaration.
+have harmless shift/reduce conflicts which are resolved in a predictable
+way and would be difficult to eliminate. It is desirable to suppress
+the warning about these conflicts unless the number of conflicts
+changes. You can do this with the `%expect' declaration.
The declaration looks like this:
%expect N
- Here N is a decimal integer. The declaration says there should be no
-warning if there are N shift/reduce conflicts and no reduce/reduce
-conflicts. The usual warning is given if there are either more or fewer
-conflicts, or if there are any reduce/reduce conflicts.
+ Here N is a decimal integer. The declaration says there should be
+no warning if there are N shift/reduce conflicts and no reduce/reduce
+conflicts. An error, instead of the usual warning, is given if there
+are either more or fewer conflicts, or if there are any reduce/reduce
+conflicts.
In general, using `%expect' involves these steps:
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index d0a44bb1..97fbb4e6 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -3070,11 +3070,11 @@ terminal symbol. All kinds of token declarations allow
@findex %expect
Bison normally warns if there are any conflicts in the grammar
-(@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars have harmless shift/reduce
-conflicts which are resolved in a predictable way and would be difficult to
-eliminate. It is desirable to suppress the warning about these conflicts
-unless the number of conflicts changes. You can do this with the
-@code{%expect} declaration.
+(@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars
+have harmless shift/reduce conflicts which are resolved in a predictable
+way and would be difficult to eliminate. It is desirable to suppress
+the warning about these conflicts unless the number of conflicts
+changes. You can do this with the @code{%expect} declaration.
The declaration looks like this:
@@ -3082,10 +3082,11 @@ The declaration looks like this:
%expect @var{n}
@end example
-Here @var{n} is a decimal integer. The declaration says there should be no
-warning if there are @var{n} shift/reduce conflicts and no reduce/reduce
-conflicts. The usual warning is given if there are either more or fewer
-conflicts, or if there are any reduce/reduce conflicts.
+Here @var{n} is a decimal integer. The declaration says there should be
+no warning if there are @var{n} shift/reduce conflicts and no
+reduce/reduce conflicts. An error, instead of the usual warning, is
+given if there are either more or fewer conflicts, or if there are any
+reduce/reduce conflicts.
In general, using @code{%expect} involves these steps:
diff --git a/doc/stamp-vti b/doc/stamp-vti
index 52edc15f..01604380 100644
--- a/doc/stamp-vti
+++ b/doc/stamp-vti
@@ -1,4 +1,4 @@
-@set UPDATED 5 November 2001
+@set UPDATED 12 November 2001
@set UPDATED-MONTH November 2001
@set EDITION 1.30b
@set VERSION 1.30b
diff --git a/doc/version.texi b/doc/version.texi
index 52edc15f..01604380 100644
--- a/doc/version.texi
+++ b/doc/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED 5 November 2001
+@set UPDATED 12 November 2001
@set UPDATED-MONTH November 2001
@set EDITION 1.30b
@set VERSION 1.30b
diff --git a/lib/Makefile.in b/lib/Makefile.in
index a3639d39..30994f2a 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 96e5c244..f60a500a 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/src/Makefile.in b/src/Makefile.in
index ba7e746f..6535ef16 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/src/conflicts.c b/src/conflicts.c
index 1e5f29cf..91345366 100644
--- a/src/conflicts.c
+++ b/src/conflicts.c
@@ -19,6 +19,7 @@
02111-1307, USA. */
#include "system.h"
+#include "complain.h"
#include "getargs.h"
#include "files.h"
#include "gram.h"
@@ -29,7 +30,8 @@
#include "LR0.h"
errs **err_table = NULL;
-int expected_conflicts;
+/* -1 stands for not specified. */
+int expected_conflicts = -1;
static char *conflicts = NULL;
static unsigned *shiftset = NULL;
@@ -404,31 +406,23 @@ conflict_report (int src_num, int rrc_num)
static char res[4096];
char *cp = res;
- if (src_num == 1)
+ if (src_num >= 1)
{
- sprintf (cp, _(" 1 shift/reduce conflict"));
- cp += strlen (cp);
- }
- else if (src_num > 1)
- {
- sprintf (cp, _(" %d shift/reduce conflicts"), src_num);
+ sprintf (cp, ngettext ("%d shift/reduce conflict",
+ "%d shift/reduce conflicts", src_num), src_num);
cp += strlen (cp);
}
if (src_num > 0 && rrc_num > 0)
{
- sprintf (cp, _(" and"));
+ sprintf (cp, " %s ", _("and"));
cp += strlen (cp);
}
- if (rrc_num == 1)
+ if (rrc_num >= 1)
{
- sprintf (cp, _(" 1 reduce/reduce conflict"));
- cp += strlen (cp);
- }
- else if (rrc_num > 1)
- {
- sprintf (cp, _(" %d reduce/reduce conflicts"), rrc_num);
+ sprintf (cp, ngettext ("%d reduce/reduce conflict",
+ "%d reduce/reduce conflicts", rrc_num), rrc_num);
cp += strlen (cp);
}
@@ -451,7 +445,7 @@ conflicts_output (FILE *out)
for (i = 0; i < nstates; i++)
if (conflicts[i])
{
- fprintf (out, _("State %d contains"), i);
+ fprintf (out, _("State %d contains "), i);
fputs (conflict_report (count_sr_conflicts (i),
count_rr_conflicts (i)), out);
}
@@ -495,9 +489,19 @@ conflicts_print (void)
}
else
{
- fprintf (stderr, _("%s contains"), infile);
+ fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr);
}
+
+ if (expected_conflicts != -1
+ && src_total != expected_conflicts)
+ {
+ complain_message_count++;
+ fprintf (stderr, ngettext ("expected %d shift/reduce conflict",
+ "expected %d shift/reduce conflicts",
+ expected_conflicts),
+ expected_conflicts);
+ }
}
diff --git a/src/main.c b/src/main.c
index 3b84380a..f6231386 100644
--- a/src/main.c
+++ b/src/main.c
@@ -62,15 +62,16 @@ main (int argc, char *argv[])
if (complain_message_count)
exit (1);
- /* find useless nonterminals and productions and reduce the grammar. In
- file reduce.c */
+ /* Find useless nonterminals and productions and reduce the grammar.
+ In file reduce.c. */
reduce_grammar ();
- /* record other info about the grammar. In files derives and nullable. */
+ /* Record other info about the grammar. In files derives and
+ nullable. */
set_derives ();
set_nullable ();
- /* convert to nondeterministic finite state machine. In file LR0.
+ /* Convert to nondeterministic finite state machine. In file LR0.
See state.h for more info. */
generate_states ();
@@ -101,14 +102,14 @@ main (int argc, char *argv[])
/* Output the tables and the parser to ftable. In file output. */
output ();
+ /* Close the input files. */
+ close_files ();
+
/* Free the symbol table data structure. */
free_symtab ();
lex_free ();
- /* Close the input files. */
- close_files ();
-
reduce_free ();
free_conflicts ();
free_nullable ();
diff --git a/tests/Makefile.in b/tests/Makefile.in
index b4be88bb..eb8fa727 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -84,8 +84,8 @@ INTLBISON = @INTLBISON@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LIB = @LIB@
LIBICONV = @LIBICONV@
-LIBOBJS = @LIBOBJS@
MKINSTALLDIRS = @MKINSTALLDIRS@
MSGFMT = @MSGFMT@
PACKAGE = @PACKAGE@
diff --git a/tests/regression.at b/tests/regression.at
index 14ce95ac..da2ab065 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -239,6 +239,66 @@ state 6
AT_CLEANUP(input.c input.output)
+
+## -------------------- ##
+## %expect not enough. ##
+## -------------------- ##
+
+AT_SETUP([%expect not enough])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 0
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 1, [],
+[input.y contains 1 shift/reduce conflict.
+expected 0 shift/reduce conflicts
+])
+AT_CLEANUP(input.c)
+
+
+## --------------- ##
+## %expect right. ##
+## --------------- ##
+
+AT_SETUP([%expect right])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 1
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 0, [],
+[input.y contains 1 shift/reduce conflict.
+])
+AT_CLEANUP(input.c)
+
+
+## ------------------ ##
+## %expect too much. ##
+## ------------------ ##
+
+AT_SETUP([%expect too much])
+
+AT_DATA([input.y],
+[[%token NUM OP
+%expect 2
+%%
+exp: exp OP exp | NUM;
+]])
+
+AT_CHECK([bison input.y -o input.c], 1, [],
+[input.y contains 1 shift/reduce conflict.
+expected 2 shift/reduce conflicts
+])
+AT_CLEANUP(input.c)
+
+
## ---------------------- ##
## Mixing %token styles. ##
## ---------------------- ##