#define TEOF 0
#define TNL 1
#define TSEMI 2
#define TBACKGND 3
#define TAND 4
#define TOR 5
#define TPIPE 6
#define TLP 7
#define TRP 8
#define TENDCASE 9
#define TENDBQUOTE 10
#define TREDIR 11
#define TWORD 12
#define TIF 13
#define TTHEN 14
#define TELSE 15
#define TELIF 16
#define TFI 17
#define TWHILE 18
#define TUNTIL 19
#define TFOR 20
#define TDO 21
#define TDONE 22
#define TBEGIN 23
#define TEND 24
#define TCASE 25
#define TESAC 26
#define TNOT 27

/* Array indicating which tokens mark the end of a list */
const char tokendlist[] = {
	1,
	0,
	0,
	0,
	0,
	0,
	0,
	0,
	1,
	1,
	1,
	0,
	0,
	0,
	1,
	1,
	1,
	1,
	0,
	0,
	0,
	1,
	1,
	0,
	1,
	0,
	1,
	0,
};

const char *const tokname[] = {
	"end of file",
	"newline",
	"\";\"",
	"\"&\"",
	"\"&&\"",
	"\"||\"",
	"\"|\"",
	"\"(\"",
	"\")\"",
	"\";;\"",
	"\"`\"",
	"redirection",
	"word",
	"\"if\"",
	"\"then\"",
	"\"else\"",
	"\"elif\"",
	"\"fi\"",
	"\"while\"",
	"\"until\"",
	"\"for\"",
	"\"do\"",
	"\"done\"",
	"\"{\"",
	"\"}\"",
	"\"case\"",
	"\"esac\"",
	"\"!\"",
};

#define KWDOFFSET 13

const char *const parsekwd[] = {
	"if",
	"then",
	"else",
	"elif",
	"fi",
	"while",
	"until",
	"for",
	"do",
	"done",
	"{",
	"}",
	"case",
	"esac",
	"!",
	0
};