home *** CD-ROM | disk | FTP | other *** search
-
- # include <stdio.h>
- /* manifest constant file for the lex/yacc interface */
-
- # define ERROR 1
- # define NAME 2
- # define STRING 3
- # define ICON 4
- # define FCON 5
- # define PLUS 6
- # define MINUS 8
- # define MUL 11
- # define AND 14
- # define OR 17
- # define ER 19
- # define QUEST 21
- # define COLON 22
- # define ANDAND 23
- # define OROR 24
-
- /* special interfaces for yacc alone */
- /* These serve as abbreviations of 2 or more ops:
- ASOP =, = ops
- RELOP LE,LT,GE,GT
- EQUOP EQ,NE
- DIVOP DIV,MOD
- SHIFTOP LS,RS
- ICOP ICR,DECR
- UNOP NOT,COMPL
- STROP DOT,STREF
-
- */
- # define ASOP 25
- # define RELOP 26
- # define EQUOP 27
- # define DIVOP 28
- # define SHIFTOP 29
- # define INCOP 30
- # define UNOP 31
- # define STROP 32
-
- /* reserved words, etc */
- # define TYPE 33
- # define CLASS 34
- # define STRUCT 35
- # define RETURN 36
- # define GOTO 37
- # define IF 38
- # define ELSE 39
- # define SWITCH 40
- # define BREAK 41
- # define CONTINUE 42
- # define WHILE 43
- # define DO 44
- # define FOR 45
- # define DEFAULT 46
- # define CASE 47
- # define SIZEOF 48
- # define ENUM 49
-
-
- /* little symbols, etc. */
- /* namely,
-
- LP (
- RP )
-
- LC {
- RC }
-
- LB [
- RB ]
-
- CM ,
- SM ;
-
- */
-
- # define LP 50
- # define RP 51
- # define LC 52
- # define RC 53
- # define LB 54
- # define RB 55
- # define CM 56
- # define SM 57
- # define ASSIGN 58
-
- /* END OF YACC */
-
- /* left over tree building operators */
- # define COMOP 59
- # define DIV 60
- # define MOD 62
- # define LS 64
- # define RS 66
- # define DOT 68
- # define STREF 69
- # define CALL 70
- # define FORTCALL 73
- # define NOT 76
- # define COMPL 77
- # define INCR 78
- # define DECR 79
- # define EQ 80
- # define NE 81
- # define LE 82
- # define LT 83
- # define GE 84
- # define GT 85
- # define ULE 86
- # define ULT 87
- # define UGE 88
- # define UGT 89
- # define SETBIT 90
- # define TESTBIT 91
- # define RESETBIT 92
- # define ARS 93
- # define REG 94
- # define OREG 95
- # define CCODES 96
- # define FREE 97
- # define STASG 98
- # define STARG 99
- # define STCALL 100
-
- /* some conversion operators */
- # define FLD 103
- # define SCONV 104
- # define PCONV 105
- # define PMCONV 106
- # define PVCONV 107
-
- /* special node operators, used for special contexts */
- # define FORCE 108
- # define CBRANCH 109
- # define INIT 110
- # define CAST 111
-
- /* node types */
- # define LTYPE 02
- # define UTYPE 04
- # define BITYPE 010
-
- /* DSIZE is the size of the dope array */
- # define DSIZE CAST+1
-
- /* type names, used in symbol table building */
- # define TNULL PTR /* pointer to UNDEF */
- # define UNDEF 0
- # define FARG 1
- # define CHAR 2
- # define SHORT 3
- # define INT 4
- # define LONG 5
- # define FLOAT 6
- # define DOUBLE 7
- # define STRTY 8
- # define UNIONTY 9
- # define ENUMTY 10
- # define MOETY 11
- # define UCHAR 12
- # define USHORT 13
- # define UNSIGNED 14
- # define ULONG 15
-
- # define ASG 1+
- # define UNARY 2+
- # define NOASG (-1)+
- # define NOUNARY (-2)+
-
- /* various flags */
- # define NOLAB (-1)
-
- /* type modifiers */
-
- # define PTR 020
- # define FTN 040
- # define ARY 060
-
- /* type packing constants */
-
- # define TMASK 060
- # define TMASK1 0300
- # define TMASK2 0360
- # define BTMASK 017
- # define BTSHIFT 4
- # define TSHIFT 2
-
- /* macros */
-
- # define MODTYPE(x,y) x = (x&(~BTMASK))|y /* set basic type of x to y */
- # define BTYPE(x) (x&BTMASK) /* basic type of x */
- # define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR)
- # define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR)
- # define ENUNSIGN(x) ((x)+(UNSIGNED-INT))
- # define DEUNSIGN(x) ((x)+(INT-UNSIGNED))
- # define ISPTR(x) ((x&TMASK)==PTR)
- # define ISFTN(x) ((x&TMASK)==FTN) /* is x a function type */
- # define ISARY(x) ((x&TMASK)==ARY) /* is x an array type */
- # define INCREF(x) (((x&~BTMASK)<<TSHIFT)|PTR|(x&BTMASK))
- # define DECREF(x) (((x>>TSHIFT)&~BTMASK)|(x&BTMASK))
- # define SETOFF(x,y) if( x%y != 0 ) x = ( (x/y + 1) * y)
- /* advance x to a multiple of y */
- # define NOFIT(x,y,z) ( (x%z + y) > z )
- /* can y bits be added to x without overflowing z */
- /* pack and unpack field descriptors (size and offset) */
- # define PKFIELD(s,o) ((o<<6)|s)
- # define UPKFSZ(v) (v&077)
- # define UPKFOFF(v) (v>>6)
-
- /* operator information */
-
- # define TYFLG 016
- # define ASGFLG 01
- # define LOGFLG 020
-
- # define SIMPFLG 040
- # define COMMFLG 0100
- # define DIVFLG 0200
- # define FLOFLG 0400
- # define LTYFLG 01000
- # define CALLFLG 02000
- # define MULFLG 04000
- # define SHFFLG 010000
- # define ASGOPFLG 020000
-
- # define SPFLG 040000
-
- #define optype(o) (dope[o]&TYFLG)
- #define asgop(o) (dope[o]&ASGFLG)
- #define logop(o) (dope[o]&LOGFLG)
- #define callop(o) (dope[o]&CALLFLG)
-
- /* table sizes */
-
- # define BCSZ 100 /* size of the table to save break and continue labels */
- # define SYMTSZ 450 /* size of the symbol table */
- # define DIMTABSZ 750 /* size of the dimension/size table */
- # define PARAMSZ 150 /* size of the parameter stack */
- # ifndef FORT
- # define TREESZ 350 /* space for building parse tree */
- # else
- # define TREESZ 1000
- # endif
- # define SWITSZ 250 /* size of switch table */
-
- # define NCHNAM 8 /* number of characters in a name */
-
- /* common defined variables */
-
- extern int nerrors; /* number of errors seen so far */
-
- typedef union ndu NODE;
- typedef unsigned int TWORD;
- extern NODE *NIL; /* a pointer which will always have 0 in it */
- extern int dope[]; /* a vector containing operator information */
- extern char *opst[]; /* a vector containing names for ops */
-
- # ifdef ONEPASS
- /* in one-pass operation, define the tree nodes */
-
- union ndu {
-
- struct {
- int op;
- int rall;
- TWORD type;
- int su;
- char name[NCHNAM];
- NODE *left;
- NODE *right;
- };
-
- struct {
- int op;
- int rall;
- TWORD type;
- int su;
- char name[NCHNAM];
- CONSZ lval;
- int rval;
- };
-
- struct {
- int op, rall;
- TWORD type;
- int su;
- int label; /* for use with branching */
- };
-
- struct {
- int op, rall;
- TWORD type;
- int su;
- int stsize; /* sizes of structure objects */
- int stalign; /* alignment of structure objects */
- };
-
- struct {
- int op;
- int cdim;
- TWORD type;
- int csiz;
- };
-
- struct {
- /* this structure is used when a floating point constant
- is being computed */
- int op;
- int cdim;
- TWORD type;
- int csiz;
- double dval;
- };
-
- };
- # endif
-