|
|
1.1 root 1:
2: # include <stdio.h>
3: /* manifest constant file for the lex/yacc interface */
4:
5: # define ERROR 1
6: # define NAME 2
7: # define STRING 3
8: # define ICON 4
9: # define FCON 5
10: # define PLUS 6
11: # define MINUS 8
12: # define MUL 11
13: # define AND 14
14: # define OR 17
15: # define ER 19
16: # define QUEST 21
17: # define COLON 22
18: # define ANDAND 23
19: # define OROR 24
20:
21: /* the defines for ASOP, RELOP, EQUOP, DIVOP,
22: SHIFTOP, ICOP, UNOP, and STROP have been
23: moved to mfile1 */
24: /* reserved words, etc */
25: # define TYPE 33
26: # define CLASS 34
27: # define STRUCT 35
28: # define RETURN 36
29: # define GOTO 37
30: # define IF 38
31: # define ELSE 39
32: # define SWITCH 40
33: # define BREAK 41
34: # define CONTINUE 42
35: # define WHILE 43
36: # define DO 44
37: # define FOR 45
38: # define DEFAULT 46
39: # define CASE 47
40: # define SIZEOF 48
41: # define ENUM 49
42:
43:
44: /* little symbols, etc. */
45: /* namely,
46:
47: LP (
48: RP )
49:
50: LC {
51: RC }
52:
53: LB [
54: RB ]
55:
56: CM ,
57: SM ;
58:
59: */
60:
61: /* These defines are being moved to mfile1
62: to alleviate preprocessor problems with
63: second pass files.
64: # define LP 50
65: # define RP 51
66: # define LC 52
67: # define RC 53
68: */
69: # define LB 54
70: # define RB 55
71: # define CM 56
72: # define SM 57
73: # define ASSIGN 58
74:
75: /* END OF YACC */
76:
77: /* left over tree building operators */
78: # define COMOP 59
79: # define DIV 60
80: # define MOD 62
81: # define LS 64
82: # define RS 66
83: # define DOT 68
84: # define STREF 69
85: # define CALL 70
86: # define FORTCALL 73
87: # define NOT 76
88: # define COMPL 77
89: # define INCR 78
90: # define DECR 79
91: # define EQ 80
92: # define NE 81
93: # define LE 82
94: # define LT 83
95: # define GE 84
96: # define GT 85
97: # define ULE 86
98: # define ULT 87
99: # define UGE 88
100: # define UGT 89
101: # define SETBIT 90
102: # define TESTBIT 91
103: # define RESETBIT 92
104: # define ARS 93
105: # define REG 94
106: # define OREG 95
107: # define CCODES 96
108: # define FREE 97
109: # define STASG 98
110: # define STARG 99
111: # define STCALL 100
112:
113: /* some conversion operators */
114: # define FLD 103
115: # define SCONV 104
116: # define PCONV 105
117: # define PMCONV 106
118: # define PVCONV 107
119:
120: /* special node operators, used for special contexts */
121: # define FORCE 108
122: # define CBRANCH 109
123: # define INIT 110
124: # define CAST 111
125:
126: /* node types */
127: # define LTYPE 02
128: # define UTYPE 04
129: # define BITYPE 010
130:
131: /* DSIZE is the size of the dope array */
132: # define DSIZE CAST+1
133:
134: /* type names, used in symbol table building */
135: # define TNULL PTR /* pointer to UNDEF */
136: # define TVOID FTN /* function returning UNDEF (for void) */
137: # define UNDEF 0
138: # define FARG 1
139: # define CHAR 2
140: # define SHORT 3
141: # define INT 4
142: # define LONG 5
143: # define FLOAT 6
144: # define DOUBLE 7
145: # define STRTY 8
146: # define UNIONTY 9
147: # define ENUMTY 10
148: # define MOETY 11
149: # define UCHAR 12
150: # define USHORT 13
151: # define UNSIGNED 14
152: # define ULONG 15
153:
154: # define ASG 1+
155: # define UNARY 2+
156: # define NOASG (-1)+
157: # define NOUNARY (-2)+
158:
159: /* various flags */
160: # define NOLAB (-1)
161:
162: /* type modifiers */
163:
164: # define PTR 020
165: # define FTN 040
166: # define ARY 060
167:
168: /* type packing constants */
169:
170: # define TMASK 060
171: # define TMASK1 0300
172: # define TMASK2 0360
173: # define BTMASK 017
174: # define BTSHIFT 4
175: # define TSHIFT 2
176:
177: /* macros */
178:
179: # define MODTYPE(x,y) x = ( (x)&(~BTMASK))|(y) /* set basic type of x to y */
180: # define BTYPE(x) ( (x)&BTMASK) /* basic type of x */
181: # define ISUNSIGNED(x) ((x)<=ULONG&&(x)>=UCHAR)
182: # define UNSIGNABLE(x) ((x)<=LONG&&(x)>=CHAR)
183: # define ENUNSIGN(x) ((x)+(UNSIGNED-INT))
184: # define DEUNSIGN(x) ((x)+(INT-UNSIGNED))
185: # define ISPTR(x) (( (x)&TMASK)==PTR)
186: # define ISFTN(x) (( (x)&TMASK)==FTN) /* is x a function type */
187: # define ISARY(x) (( (x)&TMASK)==ARY) /* is x an array type */
188: # define INCREF(x) ((( (x)&~BTMASK)<<TSHIFT)|PTR|( (x)&BTMASK))
189: # define DECREF(x) ((( (x)>>TSHIFT)&~BTMASK)|( (x)&BTMASK))
190: # define SETOFF(x,y) if( (x)%(y) != 0 ) (x) = ( ((x)/(y) + 1) * (y))
191: /* advance x to a multiple of y */
192: # define NOFIT(x,y,z) ( ( (x)%(z) + (y) ) > (z) )
193: /* can y bits be added to x without overflowing z */
194: /* pack and unpack field descriptors (size and offset) */
195: # define PKFIELD(s,o) (( (o)<<6)| (s) )
196: # define UPKFSZ(v) ( (v) &077)
197: # define UPKFOFF(v) ( (v) >>6)
198:
199: /* operator information */
200:
201: # define TYFLG 016
202: # define ASGFLG 01
203: # define LOGFLG 020
204:
205: # define SIMPFLG 040
206: # define COMMFLG 0100
207: # define DIVFLG 0200
208: # define FLOFLG 0400
209: # define LTYFLG 01000
210: # define CALLFLG 02000
211: # define MULFLG 04000
212: # define SHFFLG 010000
213: # define ASGOPFLG 020000
214:
215: # define SPFLG 040000
216:
217: #define optype(o) (dope[o]&TYFLG)
218: #define asgop(o) (dope[o]&ASGFLG)
219: #define logop(o) (dope[o]&LOGFLG)
220: #define callop(o) (dope[o]&CALLFLG)
221:
222: /* table sizes */
223:
224: # ifndef FORT
225: # define TREESZ 350 /* space for building parse tree */
226: # else
227: # define TREESZ 1000
228: # endif
229:
230: #ifndef FLEXNAMES
231: # define NCHNAM 8 /* number of characters in a name */
232: #else
233: char *hash();
234: char *savestr();
235: char *tstr();
236: int tstrused;
237: char *tstrbuf[], **curtstr;
238: #define freetstr() curtstr = tstrbuf, tstrused = 0
239: #endif
240:
241: /* common defined variables */
242:
243: extern int nerrors; /* number of errors seen so far */
244:
245: typedef union ndu NODE;
246: typedef unsigned int TWORD;
247: # define NIL (NODE *)0
248: extern int dope[]; /* a vector containing operator information */
249: extern char *opst[]; /* a vector containing names for ops */
250:
251: # ifdef ONEPASS
252: /* in one-pass operation, define the tree nodes */
253:
254: union ndu {
255:
256: struct {
257: int op;
258: int rall;
259: TWORD type;
260: int su;
261: #ifndef FLEXNAMES
262: char name[NCHNAM];
263: #else
264: char *name;
265: int stalign;
266: #endif
267: NODE *left;
268: NODE *right;
269: }in; /* interior node */
270:
271: struct {
272: int op;
273: int rall;
274: TWORD type;
275: int su;
276: #ifndef FLEXNAMES
277: char name[NCHNAM];
278: #else
279: char *name;
280: int stalign;
281: #endif
282: CONSZ lval;
283: int rval;
284: }tn; /* terminal node */
285:
286: struct {
287: int op, rall;
288: TWORD type;
289: int su;
290: int label; /* for use with branching */
291: }bn; /* branch node */
292:
293: struct {
294: int op, rall;
295: TWORD type;
296: int su;
297: int stsize; /* sizes of structure objects */
298: int stalign; /* alignment of structure objects */
299: }stn; /* structure node */
300:
301: struct {
302: int op;
303: int cdim;
304: TWORD type;
305: int csiz;
306: }fn; /* front node */
307:
308: struct {
309: /* this structure is used when a floating point constant
310: is being computed */
311: int op;
312: int cdim;
313: TWORD type;
314: int csiz;
315: double dval;
316: }fpn; /* floating point node */
317:
318: };
319: # endif
320: # ifdef BUG2
321: # define BUG1
322: # endif
323: # ifdef BUG3
324: # define BUG2
325: # define BUG1
326: # endif
327: # ifdef BUG4
328: # define BUG1
329: # define BUG2
330: # define BUG3
331: # endif
332: # ifndef ONEPASS
333:
334: # ifndef EXPR
335: # define EXPR '.'
336: # endif
337: # ifndef BBEG
338: # define BBEG '['
339: # endif
340: # ifndef BEND
341: # define BEND ']'
342: # endif
343:
344: # endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.