xref: /freebsd/bin/sh/mktokens (revision 123af6ec70016f5556da5972d4d63c7d175c06d3)
1#!/bin/sh -
2
3#-
4# Copyright (c) 1991, 1993
5#	The Regents of the University of California.  All rights reserved.
6#
7# This code is derived from software contributed to Berkeley by
8# Kenneth Almquist.
9#
10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions
12# are met:
13# 1. Redistributions of source code must retain the above copyright
14#    notice, this list of conditions and the following disclaimer.
15# 2. Redistributions in binary form must reproduce the above copyright
16#    notice, this list of conditions and the following disclaimer in the
17#    documentation and/or other materials provided with the distribution.
18# 3. Neither the name of the University nor the names of its contributors
19#    may be used to endorse or promote products derived from this software
20#    without specific prior written permission.
21#
22# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32# SUCH DAMAGE.
33#
34#	@(#)mktokens	8.1 (Berkeley) 5/31/93
35# $FreeBSD$
36
37# The following is a list of tokens.  The second column is nonzero if the
38# token marks the end of a list.  The third column is the name to print in
39# error messages.
40
41temp=`mktemp -t ka`
42cat > $temp <<\!
43TEOF	1	end of file
44TNL	0	newline
45TSEMI	0	";"
46TBACKGND 0	"&"
47TAND	0	"&&"
48TOR	0	"||"
49TPIPE	0	"|"
50TLP	0	"("
51TRP	1	")"
52TENDCASE 1	";;"
53TFALLTHRU 1	";&"
54TREDIR	0	redirection
55TWORD	0	word
56TIF	0	"if"
57TTHEN	1	"then"
58TELSE	1	"else"
59TELIF	1	"elif"
60TFI	1	"fi"
61TWHILE	0	"while"
62TUNTIL	0	"until"
63TFOR	0	"for"
64TDO	1	"do"
65TDONE	1	"done"
66TBEGIN	0	"{"
67TEND	1	"}"
68TCASE	0	"case"
69TESAC	1	"esac"
70TNOT	0	"!"
71!
72nl=`wc -l $temp`
73exec > token.h
74awk '{print "#define " $1 " " NR-1}' $temp
75echo '
76/* Array indicating which tokens mark the end of a list */
77static const char tokendlist[] = {'
78awk '{print "\t" $2 ","}' $temp
79echo '};
80
81static const char *const tokname[] = {'
82sed -e 's/"/\\"/g' \
83    -e 's/[^	 ]*[	 ][	 ]*[^	 ]*[	 ][	 ]*\(.*\)/	"\1",/' \
84    $temp
85echo '};
86'
87sed 's/"//g' $temp | awk '
88/TIF/{print "#define KWDOFFSET " NR-1; print ""; print "const char *const parsekwd[] = {"}
89/TIF/,/neverfound/{print "	\"" $3 "\","}'
90echo '	0
91};'
92
93rm $temp
94