/*
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 */
/* $Id$ */
/* D E F I N I T I O N S   F O R   T H E   L E X I C A L   A N A L Y Z E R */

/*	A token from the input stream is represented by an integer,
	called a "symbol", but it may have other information associated
	to it.
*/

#include "nofloat.h"
#include "file_info.h"
#include "nopp.h"

/* the structure of a token:	*/
struct token	{
	int tok_symb;		/* the token itself */
	char *tok_file;		/* the file it (probably) comes from */
	unsigned int tok_line;	/* the line it (probably) comes from */
	union	{
		struct idf *tok_idf;	/* for IDENTIFIER & TYPE_IDENTIFIER */
		struct	{		/* for STRING */
			char *tok_bts;	/* row of bytes	*/
			int tok_len;	/* length of row of bytes */
		} tok_string;
		struct	{		/* for INTEGER */
			int tok_fund;	/* INT or LONG */
			arith tok_ival;
		} tok_integer;
#ifndef NOFLOAT
		char *tok_fval;
#endif /* NOFLOAT */
	} tok_data;
};

#define tk_symb	tok_symb
#define tk_file	tok_file
#define tk_line	tok_line
#define tk_idf	tok_data.tok_idf
#define tk_bts	tok_data.tok_string.tok_bts
#define tk_len	tok_data.tok_string.tok_len
#define tk_fund	tok_data.tok_integer.tok_fund
#define tk_ival	tok_data.tok_integer.tok_ival
#ifndef NOFLOAT
#define tk_fval	tok_data.tok_fval
#endif /* NOFLOAT */

extern struct token dot, ahead, aside;
extern int token_nmb;			/* number of the ahead token */
extern int tk_nmb_at_last_syn_err;	/* token number at last syntax error */

#ifndef NOPP
extern int ReplaceMacros;	/* "LLlex.c"	*/
extern int AccDefined;		/* "LLlex.c"	*/
extern int Unstacked;		/* "LLlex.c"	*/
extern int UnknownIdIsZero;	/* "LLlex.c"	*/
#endif /* NOPP */
extern int EoiForNewline;	/* "LLlex.c"	*/
extern int AccFileSpecifier;	/* "LLlex.c"	*/
extern int SkipEscNewline;	/* "LLlex.c"	*/
extern int File_Inserted;	/* "LLlex.c"	*/

extern int NoUnstack;		/* buffer.c	*/

extern int err_occurred;	/* "error.c"	*/

#define	DOT	dot.tk_symb
#define	AHEAD	ahead.tk_symb
#define	ASIDE	aside.tk_symb

#define EOF	(-1)