sh
/* $Id$ */
							/* Copyright (c) 2004-2014 Pierre Pronchery <khorben@defora.org> */
							/* This file is part of DeforaOS Unix sh */
							/* This program is free software: you can redistribute it and/or modify
							 * it under the terms of the GNU General Public License as published by
							 * the Free Software Foundation, version 3 of the License.
							 *
							 * This program is distributed in the hope that it will be useful,
							 * but WITHOUT ANY WARRANTY; without even the implied warranty of
							 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 * GNU General Public License for more details.
							 *
							 * You should have received a copy of the GNU General Public License
							 * along with this program.  If not, see <http://www.gnu.org/licenses/>. */
							#ifndef SH_TOKEN_H
							# define SH_TOKEN_H
							/* Token */
							/* types */
							typedef enum _TokenCode
							{
								TC_EOI = 0,
								TC_TOKEN,
								TC_WORD,
								TC_ASSIGNMENT_WORD,
								TC_NAME,
								TC_NEWLINE,
								TC_IO_NUMBER,
								TC_OP_AND_IF,
								TC_OP_AMPERSAND,
								TC_OP_OR_IF,
								TC_OP_BAR,
								TC_OP_DSEMI,
								TC_OP_SEMICOLON,
								TC_OP_DLESSDASH,
								TC_OP_DLESS,
								TC_OP_LESSAND,
								TC_OP_LESSGREAT,
								TC_OP_LESS,
								TC_OP_DGREAT,
								TC_OP_GREATAND,
								TC_OP_CLOBBER,
								TC_OP_GREAT,
								TC_RW_IF,
								TC_RW_THEN,
								TC_RW_ELSE,
								TC_RW_ELIF,
								TC_RW_FI,
								TC_RW_DO,
								TC_RW_DONE,
								TC_RW_CASE,
								TC_RW_ESAC,
								TC_RW_WHILE,
								TC_RW_UNTIL,
								TC_RW_FOR,
								TC_RW_LBRACE,
								TC_RW_RBRACE,
								TC_RW_BANG,
								TC_RW_IN,
								TC_NULL
							} TokenCode;
							# define TC_LAST TC_RW_IN
							# define TC_COUNT (TC_LAST + 1)
							extern char const * sTokenCode[TC_COUNT];
							typedef struct _Token
							{
								TokenCode code;
								char * string;
							} Token;
							typedef enum _TokenSet
							{
								TS_AND_OR = 0,
								TS_CMD_NAME,
								TS_CMD_PREFIX,
								TS_CMD_SUFFIX,
								TS_CMD_WORD,
								TS_COMPOUND_COMMAND,
								TS_ELSE_PART,
								TS_FUNCTION_DEFINITION,
								TS_IO_FILE,
								TS_IO_HERE,
								TS_IO_REDIRECT,
								TS_NEWLINE_LIST,
								TS_REDIRECT_LIST,
								TS_SEPARATOR,
								TS_SEPARATOR_OP,
								TS_WORDLIST
							} TokenSet;
							# define TS_LAST TS_WORDLIST
							# define TS_COUNT (TS_LAST + 1)
							/* functions */
							Token * token_new(TokenCode code, char * string);
							void token_delete(Token * token);
							int token_in_set(Token * token, TokenSet set);
							#endif /* !SH_TOKEN_H */
							