/***  constants.h ***/

#define ITAG	020000
#define IIND	040000
#define DINT	060000
#define DREAL	062000
#define	DCHAR	064000
#define DSTRING	066000
#define DBITS	070000

/*----------------------------------------------------------------------*/
/* constants */

/* the internal form of standard symbols */
#define OPEN	1
#define CLOSE 	2
#define COLON	3
#define COMMA	4
#define VERT	5
#define AGAIN	6
#define GOON	7
#define EXIT	8
#define BECOMES	10
#define AT	11
#define GOTO	12
#define WHILE	13
#define DO	14
#define FOR	15
#define FROM	16
#define BY	17
#define TO	18
#define OD	19
#define IS	20
#define ISNT	21
#define DTRUE	22
#define DFALSE	23
#define EMPTY	24
#define OF	25
#define NIL	26
#define SKIP	27

/*----------------------------------------------------------------------*/
/* declarative symbols */

#define VOID	28
#define REF	29
#define FLEX	30
#define PROC	31
#define MODE	32
#define STRUCT	33
#define UNION	34
#define OP	35
#define PRIO	36
#define INT	37
#define REAL	38
#define BOOL	39
#define CHAR	40
#define STRING	41
#define COMPL	42
#define BITS	43
#define LOC	44
#define HEAP	45
#define is_OP_or_PRIO(x) (x==OP || x == PRIO)

/*----------------------------------------------------------------------*/
/* symbols used in LA only */

#define CO	46
#define COMMENT 47
#define is_comment(x) (x==CO || x == COMMENT)

#define OPEN_1	50	/* 'begin'	*/
#define OPEN_2	51	/* 'if'		*/
#define OPEN_3	52	/* 'case'	*/
#define OPEN_4	53	/* (		*/
#define OPEN_5	54	/* [		*/
#define CLOSE_1	55	/* 'end'	*/
#define CLOSE_2	56	/* 'fi'		*/
#define CLOSE_3	57	/* 'esac'	*/
#define CLOSE_4	58	/* )		*/
#define CLOSE_5 59	/* ]		*/
#define VERT_21	60	/* 'then'	*/
#define VERT_22	61	/* 'else'	*/
#define VERT_31	62	/* 'in'		*/
#define VERT_32	63	/* 'out'	*/
#define VERT_4	64	/* |		*/
#define AGAIN_2	65	/* 'elif'	*/
#define AGAIN_3	65	/* 'ouse'	*/
#define AGAIN_4	66	/* |:		*/
#define DO_1	67	/* 'do'		*/
#define OD_1	68	/* 'od'		*/
#define is_open_close(x)  (OPEN_1<=x && x <= OD_1)

/*----------------------------------------------------------------------*/
/* standard identifiers */

#define PI_TAG		50+ITAG
#define RE_TAG		51+ITAG
#define IM_TAG		52+ITAG
#define STANDIN		53+ITAG
#define STANDOUT	54+ITAG
#define BITSWIDTH	55+ITAG
#define BLANK_TAG	56+ITAG
#define STOP_TAG	150+ITAG

/*----------------------------------------------------------------------*/

#define	PLUSTO		57+IIND
#define PLUSAB		58+IIND
#define MINAB		59+IIND
#define	TIMEAB		60+IIND
#define	OVERAB		61+IIND
#define	MODAB		62+IIND
#define	DIVAB		63+IIND

#define	OR		64+IIND
#define AND		65+IIND

#define EQ_ST		66+IIND
#define NE		67+IIND
#define LESS		68+IIND
#define GREATER		69+IIND
#define LE		70+IIND
#define GE		71+IIND

#define PLUS		72+IIND
#define MINUS		73+IIND
#define TIMES		74+IIND
#define DIV		75+IIND
#define OVER		76+IIND
#define MOD		77+IIND
#define ELEM		78+IIND

#define UP		80+IIND
#define DOWN		81+IIND

#define LWB		82+IIND
#define UPB		83+IIND
#define PLIT		79+IIND

/* unary operators */

#define	NOT		84+IIND
#define ABS		85+IIND
#define ODD		86+IIND
#define	SIGN		87+IIND
#define	ENTIER		88+IIND
#define ROUND		89+IIND
#define	RE		90+IIND
#define	IM		91+IIND
#define	CONJ		92+IIND
#define	ARG		93+IIND
#define	REPR		94+IIND
#define BIN		95+IIND

/*----------------------------------------------------------------------*/
/* identifiers */

#define SQRT		96+ITAG
#define EXP		97+ITAG
#define LOG		98+ITAG
#define COS		99+ITAG
#define ARCCOS		100+ITAG
#define SIN		101+ITAG
#define ARCSIN		102+ITAG
#define TAN		103+ITAG
#define ARCTAN		104+ITAG

#define PRINT		105+ITAG
#define READ		106+ITAG
#define WRITE		107+ITAG

#define NEWLINE		108+ITAG
#define SPACE		109+ITAG
#define NEWPAGE		110+ITAG

#define RANDOM		111+ITAG
#define BITSPACK	112+ITAG

#define first_SYMBOL_number	151

