set -o posix
fi
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $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" : '.*/\([^/][^/]*\)/*$' \| \
/^X\/\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
-# Rewrite early, but we need PATH_SEPARATOR.
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
echo "#! $SHELL" >conftest.sh
rm -f conftest.sh
fi
-{
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2"
-} || {
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
# Find who we are. Look in the path if we contain no path at all
# relative or not.
case $0 in
for as_base in sh bash ksh sh5; do
case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '{
+ if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2"
-}') 2>/dev/null; then
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
CONFIG_SHELL=$as_dir/$as_base
export CONFIG_SHELL
exec "$CONFIG_SHELL" "$0" ${1+"$@"}
done
;;
esac
- if test ! -f "$as_me.lineno" ||
- test x`ls -1dt "$as_me.lineno" "$as_myself" 2>/dev/null | sed 1q` \
- != x"$as_me.lineno"; then
- # Be sure to write the pattern so that it doesn't replace itself:
- # it must not match itself.
- awk <$as_myself '
- /[$]LINENO/ { printf "%d:", NR }
- { print }
- ' |
- sed '/[$]LINENO/s/^\([0-9][0-9]*\):\(.*\)[$]LINENO/\2\1/' \
- >$as_me.lineno
- chmod +x $as_me.lineno
- fi
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
exit
}
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
*c*,-n*) ECHO_N= ECHO_C='
' ECHO_T=' ' ;;
# Sed expression to map a string onto a valid variable name.
as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
-
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
set -o posix
fi
+# NLS nuisances.
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+(set +x; test -n "`(LANG=C; export LANG) 2>&1`") &&
+ { $as_unset LANG || test "${LANG+set}" != set; } ||
+ { LANG=C; export LANG; }
+(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") &&
+ { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } ||
+ { LC_ALL=C; export LC_ALL; }
+(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") &&
+ { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } ||
+ { LC_TIME=C; export LC_TIME; }
+(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") &&
+ { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } ||
+ { LC_CTYPE=C; export LC_CTYPE; }
+(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") &&
+ { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } ||
+ { LANGUAGE=C; export LANGUAGE; }
+(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") &&
+ { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } ||
+ { LC_COLLATE=C; export LC_COLLATE; }
+(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") &&
+ { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } ||
+ { LC_NUMERIC=C; export LC_NUMERIC; }
+(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") &&
+ { $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" : '.*/\([^/][^/]*\)/*$' \| \
/^X\/\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
-# Rewrite early, but we need PATH_SEPARATOR.
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
echo "#! $SHELL" >conftest.sh
rm -f conftest.sh
fi
-{
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2"
-} || {
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
# Find who we are. Look in the path if we contain no path at all
# relative or not.
case $0 in
for as_base in sh bash ksh sh5; do
case $as_dir in
/*)
- if ("$as_dir/$as_base" -c '{
+ if ("$as_dir/$as_base" -c '
as_lineno_1=$LINENO
as_lineno_2=$LINENO
as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x$as_lineno_3" = "x$as_lineno_2"
-}') 2>/dev/null; then
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
CONFIG_SHELL=$as_dir/$as_base
export CONFIG_SHELL
exec "$CONFIG_SHELL" "$0" ${1+"$@"}
done
;;
esac
- if test ! -f "$as_me.lineno" ||
- test x`ls -1dt "$as_me.lineno" "$as_myself" 2>/dev/null | sed 1q` \
- != x"$as_me.lineno"; then
- # Be sure to write the pattern so that it doesn't replace itself:
- # it must not match itself.
- awk <$as_myself '
- /[$]LINENO/ { printf "%d:", NR }
- { print }
- ' |
- sed '/[$]LINENO/s/^\([0-9][0-9]*\):\(.*\)[$]LINENO/\2\1/' \
- >$as_me.lineno
- chmod +x $as_me.lineno
- fi
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
# Don't try to exec as it changes $[0], causing all sort of problems
# (the dirname of $[0] is not the place where we might find the
exit
}
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
*c*,-n*) ECHO_N= ECHO_C='
' ECHO_T=' ' ;;
# Sed expression to map a string onto a valid variable name.
as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
-
# IFS
# We need space, tab and new line, in precisely that order.
as_nl='
% This file can be printed with 1 or 2 columns per page (see below).
% Specify how many you want here. Nothing else needs to be changed
% unless you are maintaining the documentation.
-% For printing reference cards to use in books, specify one column
+% For printing reference cards to use in books, specify one column
% per page and reduce to 80%.
% Note that if columnsperpage is set to 2, there will be a few overfull
% boxes, but they are not serious. Just uncomment \finalout.
\def\finalout{\overfullrule=0pt}
%\finalout
-% Copyright (c) 1998 Free Software Foundation, Inc.
+% Copyright (c) 1998, 2001 Free Software Foundation, Inc.
%
% This file is part of Bison.
%
% Which mode to use is controlled by setting \columnsperpage above.
%
% Authors:
-% Brendan Kehoe
+% Brendan Kehoe
% UUCP: widener!brendan
-% Internet: brendan@cs.widener.edu
+% Internet: brendan@cs.widener.edu
%
-% Gavin Nicol
+% Gavin Nicol
% Internet: nick@nsis.cl.co.jp
%
% This refcard format was created by Steve Gildea.
% We only change the following to change the version numbers and
% such.
-\def\bisonversion{1.20} % the bison version
+\def\bisonversion{1.31} % the bison version
-\def\refcardversion{0.4a} % reference card version
-\def\month{August} % month
-\def\year{1998} % year
-\def\version{\month\ \year, Bison Refcard Version \refcardversion}
+\def\refcardversion{0.5} % reference card version
+\def\month{November} % month
+\def\year{2001} % year
+\def\version{\month\ \year, Bison Refcard Version \refcardversion}
% for copyright notices
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
Permission is granted to make and distribute copies of this card
provided the copyright notice and this permission notice
-are preserved on all copies.
+are preserved on all copies.
\vskip .2\baselineskip
For information, write to the:
\vskip .2\baselineskip
Permission is granted to make and distribute copies of this card
provided the copyright notice and this permission notice
-are preserved on all copies.
+are preserved on all copies.
\vskip .2\baselineskip
For information, write to the:
\vskip .2\baselineskip
\def\ncolumns{\the\columnsperpage}
-\message{[\ncolumns\space
+\message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1}
\def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi
- \end}
+ \end}
\fi
% we won't be using math mode much, so redefine some of the characters
\section{Command Line Options}
%*****************************
+\key{Display usage information.} {-h}
+\key{Display version information.} {-V}
\key{Generate token and {\tt YYSTYPE} definitions.} {-d}
+\key{Prepend a prefix to external symbols.} {-p {\it prefix}}
\key{Don't put {\tt \#line} directives in the parser.} {-l}
\key{Specify the output file.} {-o {\it filename}}
-\key{Debug or {\it trace} mode.} {-t}
+\key{Debug or {\it trace} mode.} {-t}
\key{Verbose description of the parser.} {-v}
\key{Emulate {\tt yacc} (generate {\tt y.tab.*} files).} {-y}
\vskip .10truein
-{\bf Note:} The token and {\tt YYSTYPE} definitions are generated
-to a file called {\tt y.tab.h} if the {\tt -y} option is used,
+{\bf Note:} The token and {\tt YYSTYPE} definitions are generated
+to a file called {\tt y.tab.h} if the {\tt -y} option is used,
otherwise it will have the format {\tt {\it name}.tab.h}, where
{\it name} is the leading part of the parser definition filename.
\section{Definitions}
%********************
-\key{Declare a terminal symbol.}{\%token <{\it t\/}>
+\key{Declare a terminal symbol.}{\%token <{\it t\/}>
{\it n}}
-\key{Declare a terminal symbol, and define its association.}
+\key{Declare a terminal symbol, and define its association.}
{{\it association} <{\it t\/}> {\it n}}
\vskip .2\baselineskip
-\key{Generate a reentrant (pure) parser.}
+\key{Generate a reentrant (pure) parser.}
{\%pure_parser}
-\key{Define the union of all data types used in the parser.}
+\key{Define the union of all data types used in the parser.}
{\%union\{{\it field list}\} }
\vskip .2\baselineskip
-\key{Tell {\tt bison} where to start parsing.}
- {\%start {\it m}}
+\key{Tell {\tt bison} where to start parsing.}
+ {\%start {\it m}}
-\key{Tell {\tt bison} the data type of symbols.}
- {\%type <{\it t\/}> {\it s1}\dots{\it sn}}
+\key{Tell {\tt bison} the data type of symbols.}
+ {\%type <{\it t\/}> {\it s1}\dots{\it sn}}
\vskip .10truein
\vskip .10truein
The {\tt <{\it t\/}>} after {\tt \%token, \%left, \%right} and {\tt
-\%nonassoc} is optional. Additionally, precedence may be overridden with
-embedded {\tt \%prec} commands.
+ \%nonassoc} is optional. Additionally, precedence may be overridden
+in the rules with {\tt \%prec} commands.
\section{Parser Definition Files}
%*********************************
\%\%
- Rule definition 1
+ Rule definition 1
\vdots
Rule definition {\it n}
Rules take the form:
+\vskip -\baselineskip
\beginexample
- non-terminal : {\it statement} 1
+ non-terminal : {\it statement} 1
| {\it statement} 2
\vdots
| {\it statement n}
\endexample
Where {\it statements} can be either empty, or contain
-a mixture of C code (enclosed in {\tt \{...\}}), and the
+a mixture of C code (enclosed in {\tt \{...\}}), and the
symbols that make up the non-terminal. For example:
\vskip -\baselineskip
\beginexample
- expression : number '$+$' number \{ \$\$ $=$ \$1 $+$ \$3 \}
+ expression : number '$+$' number \{ \$\$ $=$ \$1 $+$ \$3 \}
| number '$-$' number \{ \$\$ $=$ \$1 $-$ \$3 \}
| number '$/$' number \{ \$\$ $=$ \$1 $/$ \$3 \}
| number '$*$' number \{ \$\$ $=$ \$1 $*$ \$3 \}
For example:
\vskip -\baselineskip
\beginexample
- foo : gnu bar gnu \%prec bar
+ foo : gnu bar gnu \%prec bar
;
\endexample
\key{Recognize an error \& continue parsing.}{error}
\key{Access data associated with a symbol.} {\$\$, \$0\dots\${\it n}}
\key{Access a field of the data union.} {\$\$.{\it t},
- \$0.{\it t}\dots\${\it n}.{\it t}}
-\key{Access data's line position.} {@{\it n}.{\it line\_spec}}
-\key{Access data's column position.} {@{\it n}.{\it column\_spec}}
+ \$0.{\it t}\dots\${\it n}.{\it t}}
+\key{Access symbol's location.} {@\$, @0\dots@{\it n}}
+\key{Access data's line location.} {@{\it x}.{\it line\_spec}}
+\key{Access data's column location.} {@{\it x}.{\it column\_spec}}
\vskip .10truein
+%
Where {\it t} is a type defined in the {\tt \%union}, {\it n} is a
-number, {\it line\_spec} one of {\tt first_line} and {\tt last_line},
-and {\it column\_spec} is specified as either {\tt first_column} or {\tt
-last_column}.
+number, {\it x} is a number or \$, {\it line\_spec} one of {\tt
+ first_line} and {\tt last_line}, and {\it column\_spec} is specified
+as either {\tt first_column} or {\tt last_column}.
\section {Variables and Types}
%*****************************