#!/bin/sh -
# Copyright (c) 1991, 1993
#	The Regents of the University of California.  All rights reserved.
# Copyright (c) 1997-2005
#	Herbert Xu <herbert@gondor.apana.org.au>.  All rights reserved.
#
# This code is derived from software contributed to Berkeley by
# Kenneth Almquist.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of the University nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#	@(#)mktokens	8.1 (Berkeley) 5/31/93

# The following is a list of tokens.  The second column is nonzero if the
# token marks the end of a list.  The third column is the name to print in
# error messages.

cat > /tmp/ka$$ <<\!
TEOF	1	end of file
TNL	0	newline
TSEMI	0	";"
TBACKGND 0	"&"
TAND	0	"&&"
TOR	0	"||"
TPIPE	0	"|"
TLP	0	"("
TRP	1	")"
TENDCASE 1	";;"
TENDBQUOTE 1	"`"
TREDIR	0	redirection
TWORD	0	word
TNOT	0	"!"
TCASE	0	"case"
TDO	1	"do"
TDONE	1	"done"
TELIF	1	"elif"
TELSE	1	"else"
TESAC	1	"esac"
TFI	1	"fi"
TFOR	0	"for"
TIF	0	"if"
TIN	0	"in"
TTHEN	1	"then"
TUNTIL	0	"until"
TWHILE	0	"while"
TBEGIN	0	"{"
TEND	1	"}"
!
nl=`wc -l /tmp/ka$$`
exec > token.h
awk '{print "#define " $1 " " NR-1}' /tmp/ka$$

exec > token_vars.h

echo '
/* Array indicating which tokens mark the end of a list */
static const char tokendlist[] = {'
awk '{print "\t" $2 ","}' /tmp/ka$$
echo '};

static const char *const tokname[] = {'
sed -e 's/"/\\"/g' \
    -e 's/[^	 ]*[	 ][	 ]*[^	 ]*[	 ][	 ]*\(.*\)/	"\1",/' \
    /tmp/ka$$
echo '};
'
sed 's/"//g' /tmp/ka$$ | awk '
/TNOT/{print "#define KWDOFFSET " NR-1; print ""; 
      print "static const char *const parsekwd[] = {"}
/TNOT/,/neverfound/{if (last) print "	\"" last "\","; last = $3}
END{print "	\"" last "\"\n};"}'

rm /tmp/ka$$
