/* T O K E N   D E S C R I P T O R   D E F I N I T I O N */

/* Structure to store a string constant
*/
struct string {
	arith s_length;			/* length of a string */
	char *s_str;			/* the string itself */
};

/* Token structure. Keep it small, as it is part of a parse-tree node
*/
struct token	{
	short tk_symb;			/* token itself	*/
	unsigned short tk_lineno;	/* linenumber on which it occurred */
	union {
		struct idf *tk_idf;	/* IDENT	*/
		struct string *tk_str;	/* STRING	*/
		arith tk_int;		/* INTEGER	*/
		char *tk_real;		/* REAL		*/
		arith *tk_set;		/* only used in parse tree node */
		struct def *tk_def;	/* only used in parse tree node */
		label tk_lab;		/* only used in parse tree node */
	} tk_data;
};

#define TOK_IDF	tk_data.tk_idf
#define TOK_STR	tk_data.tk_str->s_str
#define TOK_SLE tk_data.tk_str->s_length
#define TOK_INT	tk_data.tk_int
#define TOK_REL tk_data.tk_real

extern struct token dot, aside;
extern struct type *toktype;

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