|
|
1.1 root 1:
2: #include "gram.h"
3: #include "expr.pub"
4: #include "bpts.pub"
5: #include <ctype.h>
6: int LexIndex;
7: int LexGoal;
8: struct Expr *CurrentExpr;
9: char *LexString;
10: char *yyerr; /* yacc doesn't use this */
11: long yyres;
12: char Token[128];
13: int DotDot;
14: Expr *E_IConst(long), *E_DConst(double);
15:
16: typedef union {
17: char cc;
18: long ll;
19: char ss[32];
20: struct Expr *ee;
21: double dd;
22: } YYSTYPE;
23: # define G_EXPR 257
24: # define G_DOTEQ_CONEX 258
25: # define G_DOLEQ_CONEX 259
26: # define G_CONEX 260
27: # define G_DOTDOT 261
28: # define ICONST 262
29: # define ID 263
30: # define PCENT 264
31: # define EQUAL 265
32: # define SLASH 266
33: # define DOLLAR 267
34: # define SIZEOF 268
35: # define TYPEOF 269
36: # define QMARK 270
37: # define SEMI 271
38: # define UNOP 272
39: # define STAR 273
40: # define PLUS 274
41: # define MINUS 275
42: # define AMPER 276
43: # define ARROW 277
44: # define DOT 278
45: # define LB 279
46: # define LP 280
47: # define COMMA 281
48: # define ERROR 282
49: # define RB 283
50: # define RP 284
51: # define PLUSPLUS 285
52: # define MINUSMINUS 286
53: # define EQUALEQUAL 287
54: # define GREATER 288
55: # define LESS 289
56: # define BAR 290
57: # define BARBAR 291
58: # define AMPERAMPER 292
59: # define HAT 293
60: # define TILDE 294
61: # define GREATEREQUAL 295
62: # define LESSEQUAL 296
63: # define FABS 297
64: # define GREATERGREATER 298
65: # define LESSLESS 299
66: # define BANG 300
67: # define BANGEQUAL 301
68: # define DCONST 302
69: # define LC 303
70: # define RC 304
71: # define DOTDOT 305
72: #define yyclearin yychar = -1
73: #define yyerrok yyerrflag = 0
74: extern int yychar;
75: extern short yyerrflag;
76: #ifndef YYMAXDEPTH
77: #define YYMAXDEPTH 150
78: #endif
79: YYSTYPE yylval, yyval;
80: # define YYERRCODE 256
81:
82:
83:
84: #define LOOK (LexString[LexIndex ])
85: #define TAKE (AddToken(), LexString[LexIndex++])
86: #define MORE (LexString[LexIndex+1])
87: #define yc (yylval.cc)
88: #define yd (yylval.dd)
89: #define yl (yylval.ll)
90: #define ys (yylval.ss)
91: #define ishex(x) (isdigit(x) || (x>='a'&&x<='f') || (x>='A'&&x<='F'))
92: #define isoct(x) ( x>='0' && x<='7' )
93: int doyylex();
94: int yyerror(char*);
95:
96: yylex()
97: {
98: int token = doyylex();
99:
100: return token;
101: }
102:
103: void AddToken()
104: {
105: int l = strlen(Token);
106:
107: if( l < 64 ){
108: Token[l] = LOOK;
109: Token[l+1] = '\0';
110: }
111: }
112:
113: doyylex()
114: {
115: double atof(char*);
116:
117: if( LexIndex < 0 ){
118: LexIndex = 0;
119: return LexGoal;
120: }
121: while( isspace(LOOK) ) TAKE;
122: Token[0] = '\0';
123: if( isalpha(LOOK) || LOOK=='_' || LOOK=='$' ){
124: TAKE;
125: while( isalnum(LOOK) || LOOK=='_' ) TAKE;
126: strcpy( ys, Token );
127: if( !strcmp(ys,"sizeof") ) return SIZEOF;
128: if( !strcmp(ys,"typeof") ) return TYPEOF;
129: if( !strcmp(ys,"fabs") ) return FABS;
130: if( !strcmp(ys,"$") ) return DOLLAR;
131: return ID;
132: }
133: if( LOOK == '\'' ){
134: TAKE;
135: if( LOOK == '\\' ){
136: TAKE;
137: if( MORE != '\'' ) return 0;
138: char *trans = "bnftv", *late = "\b\n\f\t\v";
139: yl = LOOK;
140: for( int i = 0; trans[i]; ++i )
141: if( LOOK == trans[i] ) yl = late[i];
142: TAKE; TAKE; return ICONST;
143: }
144: if( MORE != '\'' ) return 0;
145: yl = TAKE;
146: TAKE;
147: return ICONST;
148: }
149: if( LOOK=='0' && (MORE=='x' || MORE=='X') ){
150: TAKE; TAKE;
151: if( !ishex(LOOK) ) return 0;
152: for( yl = 0; ishex(LOOK); TAKE )
153: yl = (yl<<4) + (isalpha(LOOK) ? (LOOK|' ')+10-'a' : LOOK-'0');
154: return ICONST;
155: }
156: if( LOOK=='0' ){
157: for( TAKE, yl = 0; isoct(LOOK); TAKE ) yl = (yl<<3) + LOOK - '0';
158: goto IorD;
159: }
160: if( isdigit(LOOK) ){
161: for( yl = 0; isdigit(LOOK); TAKE ) yl = yl*10 + LOOK - '0';
162: goto IorD;
163: }
164: if( LOOK == '.' && isdigit(MORE) ) goto Point;
165: #define EAT2(x) {TAKE; TAKE; return x;}
166: if( LOOK=='.' && MORE=='.' ) EAT2(DOTDOT)
167: if( LOOK=='-' && MORE=='>' ) EAT2(ARROW)
168: if( LOOK=='-' && MORE=='-' ) EAT2(MINUSMINUS)
169: if( LOOK=='+' && MORE=='+' ) EAT2(PLUSPLUS)
170: if( LOOK=='=' && MORE=='=' ) EAT2(EQUALEQUAL)
171: if( LOOK=='!' && MORE=='=' ) EAT2(BANGEQUAL)
172: if( LOOK==':' && MORE=='=' ) EAT2(EQUAL)
173: if( LOOK=='>' && MORE=='=' ) EAT2(GREATEREQUAL)
174: if( LOOK=='<' && MORE=='=' ) EAT2(LESSEQUAL)
175: if( LOOK=='&' && MORE=='&' ) EAT2(AMPERAMPER)
176: if( LOOK=='|' && MORE=='|' ) EAT2(BARBAR)
177: if( LOOK=='>' && MORE=='>' ) EAT2(GREATERGREATER)
178: if( LOOK=='<' && MORE=='<' ) EAT2(LESSLESS)
179: switch( TAKE ){
180: case '>' : return GREATER;
181: case '<' : return LESS;
182: case '/' : return SLASH;
183: case '*' : return STAR;
184: case '+' : return PLUS;
185: case '-' : return MINUS;
186: case '.' : return DOT;
187: case '(' : return LP;
188: case ')' : return RP;
189: case '[' : return LB;
190: case ']' : return RB;
191: case '&' : return AMPER;
192: case ',' : return COMMA;
193: case '%' : return PCENT;
194: case '=' : return EQUAL;
195: case ';' : return SEMI;
196: case '|' : return BAR;
197: case '^' : return HAT;
198: case '~' : return TILDE;
199: case '!' : return BANG;
200: case '{' : return LC;
201: case '}' : return RC;
202: default : return 0;
203: }
204: IorD:
205: if( LOOK=='l' || LOOK=='L' ) return TAKE, ICONST;
206: if( LOOK=='.' && MORE=='.' ) return ICONST;
207: if( LOOK=='.' ) goto Point;
208: if( LOOK=='e' || LOOK=='E' ) goto Exp;
209: return ICONST;
210: Point:
211: for( TAKE; isdigit(LOOK); TAKE) {}
212: if( LOOK!='e' && LOOK!='E' ) goto Double;
213: Exp:
214: TAKE;
215: if( LOOK=='+' || LOOK=='-' ) TAKE;
216: if( !isdigit(LOOK) ) return 0;
217: while( isdigit(LOOK) ) TAKE;
218: Double:
219: yd = atof(Token);
220: return DCONST;
221:
222: }
223: short yyexca[] ={
224: -1, 1,
225: 0, -1,
226: -2, 0,
227: };
228: # define YYNPROD 62
229: # define YYLAST 800
230: short yyact[]={
231:
232: 66, 50, 68, 128, 81, 72, 127, 42, 9, 67,
233: 69, 64, 54, 65, 48, 70, 10, 49, 35, 34,
234: 129, 126, 110, 56, 59, 58, 53, 51, 52, 55,
235: 93, 61, 60, 8, 62, 63, 7, 57, 66, 50,
236: 68, 47, 65, 48, 70, 1, 117, 67, 69, 64,
237: 54, 65, 48, 70, 0, 49, 0, 125, 0, 0,
238: 0, 56, 59, 58, 53, 51, 52, 55, 0, 61,
239: 60, 0, 62, 63, 0, 57, 66, 50, 68, 47,
240: 2, 4, 5, 6, 3, 67, 69, 64, 54, 65,
241: 48, 70, 0, 49, 0, 0, 120, 0, 0, 56,
242: 59, 58, 53, 51, 52, 55, 0, 61, 60, 0,
243: 62, 63, 0, 57, 66, 50, 68, 47, 0, 0,
244: 0, 0, 0, 67, 69, 64, 54, 65, 48, 70,
245: 0, 49, 0, 0, 0, 0, 0, 56, 59, 58,
246: 53, 51, 52, 55, 0, 61, 60, 0, 62, 63,
247: 0, 57, 0, 0, 116, 47, 66, 50, 68, 0,
248: 0, 0, 0, 82, 0, 67, 69, 64, 54, 65,
249: 48, 70, 0, 49, 0, 0, 0, 0, 0, 56,
250: 59, 58, 53, 51, 52, 55, 0, 61, 60, 0,
251: 62, 63, 0, 57, 66, 50, 68, 47, 0, 0,
252: 0, 46, 0, 67, 69, 64, 54, 65, 48, 70,
253: 0, 49, 0, 0, 0, 0, 0, 56, 59, 58,
254: 53, 51, 52, 55, 0, 61, 60, 0, 62, 63,
255: 0, 57, 66, 50, 68, 47, 0, 0, 0, 0,
256: 0, 67, 69, 64, 54, 65, 48, 70, 0, 0,
257: 0, 0, 0, 0, 0, 56, 59, 58, 53, 51,
258: 52, 55, 0, 61, 60, 0, 62, 63, 0, 57,
259: 66, 50, 68, 47, 0, 0, 0, 0, 0, 67,
260: 69, 64, 54, 65, 48, 70, 0, 49, 0, 0,
261: 0, 0, 0, 56, 59, 58, 53, 51, 52, 55,
262: 0, 61, 60, 0, 62, 63, 0, 57, 66, 50,
263: 68, 14, 13, 0, 0, 0, 12, 67, 69, 64,
264: 54, 65, 48, 70, 16, 15, 0, 0, 0, 17,
265: 0, 56, 59, 58, 53, 51, 52, 55, 0, 61,
266: 60, 0, 62, 63, 66, 57, 68, 0, 0, 0,
267: 0, 0, 0, 67, 69, 64, 54, 65, 48, 70,
268: 0, 0, 38, 0, 40, 0, 0, 56, 59, 58,
269: 53, 39, 52, 55, 0, 61, 60, 42, 62, 63,
270: 66, 57, 68, 0, 0, 0, 0, 0, 0, 67,
271: 69, 64, 54, 65, 48, 70, 0, 0, 0, 0,
272: 0, 0, 0, 56, 59, 58, 53, 0, 0, 55,
273: 0, 61, 60, 0, 62, 63, 66, 57, 68, 0,
274: 0, 0, 0, 0, 0, 67, 69, 64, 54, 65,
275: 48, 70, 0, 0, 0, 0, 0, 0, 0, 56,
276: 59, 58, 0, 0, 0, 55, 0, 61, 60, 0,
277: 62, 63, 66, 57, 68, 0, 0, 0, 0, 0,
278: 0, 67, 69, 64, 54, 65, 48, 70, 0, 0,
279: 0, 0, 0, 0, 0, 56, 59, 58, 0, 66,
280: 0, 68, 0, 61, 60, 0, 62, 63, 67, 57,
281: 23, 21, 65, 48, 70, 19, 26, 27, 0, 0,
282: 66, 24, 68, 29, 25, 0, 0, 0, 31, 67,
283: 69, 64, 118, 65, 48, 70, 0, 0, 0, 0,
284: 0, 0, 30, 0, 0, 32, 0, 0, 28, 0,
285: 22, 20, 23, 21, 62, 63, 0, 19, 26, 27,
286: 0, 0, 38, 24, 40, 29, 25, 0, 0, 0,
287: 31, 39, 41, 37, 0, 0, 0, 42, 0, 0,
288: 0, 0, 91, 0, 30, 0, 66, 32, 68, 0,
289: 28, 0, 22, 20, 0, 67, 69, 64, 0, 65,
290: 48, 70, 0, 0, 0, 0, 0, 0, 0, 56,
291: 59, 58, 0, 0, 0, 0, 0, 61, 60, 0,
292: 62, 63, 66, 57, 68, 0, 0, 0, 0, 0,
293: 0, 67, 69, 64, 0, 65, 48, 70, 0, 0,
294: 38, 0, 40, 0, 0, 0, 59, 58, 0, 39,
295: 41, 37, 0, 61, 60, 42, 62, 63, 66, 124,
296: 68, 0, 0, 0, 0, 0, 0, 67, 69, 64,
297: 0, 65, 48, 70, 38, 0, 40, 0, 0, 0,
298: 0, 123, 0, 39, 41, 37, 38, 0, 40, 42,
299: 18, 0, 0, 122, 0, 39, 41, 37, 38, 33,
300: 40, 42, 0, 0, 0, 36, 0, 39, 41, 37,
301: 0, 71, 0, 42, 0, 73, 74, 75, 76, 77,
302: 78, 79, 80, 0, 0, 0, 0, 0, 0, 0,
303: 0, 0, 0, 0, 0, 0, 0, 0, 92, 0,
304: 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
305: 104, 105, 106, 107, 108, 109, 0, 111, 112, 113,
306: 114, 115, 11, 119, 0, 0, 0, 0, 0, 0,
307: 0, 0, 121, 0, 0, 0, 0, 0, 43, 44,
308: 45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
309: 0, 0, 0, 0, 0, 0, 0, 83, 84, 0,
310: 85, 86, 87, 88, 89, 90, 0, 0, 0, 0,
311: 0, 0, 0, 0, 0, 0, 0, 0, 0, 130 };
312: short yypact[]={
313:
314: -177,-1000,-1000,-1000,-270,-251, 49, 270, 270,-246,
315: -247, 414,-1000,-1000,-1000, 49, 49, 49, -70,-1000,
316: 270,-275,-1000,-1000, 270, 270, 270, 270, 270, 270,
317: 270, 270,-276,-108, 49, 49,-1000, 49, 49, 49,
318: 49, 49, 49,-272,-272, 278,-1000, 270,-233, 270,
319: 270, 270, 270, 270, 270, 270, 270, 270, 270, 270,
320: 270, 270, 270, 270, 270,-241, 270, 270, 270, 270,
321: 270,-150, 228,-235, 302,-235,-235,-235,-235,-235,
322: -188, 270,-1000, 402, 390, 98,-272,-272,-272, 98,
323: 356,-1000, 6,-1000, 44, 44, 80, 116, 152, 302,
324: 188, 338, 338, 236, 236, 236, 236, 374, 374, 215,
325: -1000,-235,-235,-235, 215,-226,-242,-278,-1000, -32,
326: -1000,-264,-1000,-1000,-1000,-1000,-1000,-1000, 270,-1000,
327: -32 };
328: short yypgo[]={
329:
330: 0, 670, 46, 742, 45, 36, 33 };
331: short yyr1[]={
332:
333: 0, 5, 4, 6, 4, 4, 4, 4, 1, 1,
334: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
335: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
336: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
337: 1, 1, 1, 1, 1, 1, 1, 1, 3, 3,
338: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
339: 2, 2 };
340: short yyr2[]={
341:
342: 0, 0, 4, 0, 4, 5, 5, 3, 1, 4,
343: 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
344: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
345: 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
346: 3, 3, 3, 4, 4, 3, 3, 4, 1, 1,
347: 1, 2, 2, 3, 3, 3, 3, 3, 4, 3,
348: 1, 3 };
349: short yychk[]={
350:
351: -1000, -4, 257, 261, 258, 259, 260, -5, -6, 278,
352: 267, -3, 267, 263, 262, 276, 275, 280, -1, 267,
353: 303, 263, 302, 262, 273, 276, 268, 269, 300, 275,
354: 294, 280, 297, -1, 265, 265, 271, 275, 264, 273,
355: 266, 274, 279, -3, -3, -3, 271, 305, 278, 281,
356: 265, 291, 292, 290, 276, 293, 287, 301, 289, 288,
357: 296, 295, 298, 299, 275, 277, 264, 273, 266, 274,
358: 279, -1, 280, -1, -1, -1, -1, -1, -1, -1,
359: -1, 280, 271, -3, -3, -3, -3, -3, -3, -3,
360: -3, 284, -1, 263, -1, -1, -1, -1, -1, -1,
361: -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
362: 263, -1, -1, -1, -1, -1, 304, -2, 284, -1,
363: 284, -1, 271, 271, 283, 283, 263, 284, 281, 284,
364: -1 };
365: short yydef[]={
366:
367: 0, -2, 1, 3, 0, 0, 0, 0, 0, 0,
368: 0, 0, 48, 49, 50, 0, 0, 0, 0, 8,
369: 0, 10, 11, 12, 0, 0, 0, 0, 0, 0,
370: 0, 0, 0, 0, 0, 0, 7, 0, 0, 0,
371: 0, 0, 0, 51, 52, 0, 2, 0, 0, 0,
372: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
373: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
374: 0, 0, 0, 13, 14, 15, 16, 17, 18, 19,
375: 0, 0, 4, 0, 0, 53, 54, 55, 56, 57,
376: 0, 59, 20, 21, 22, 23, 24, 25, 26, 27,
377: 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
378: 38, 39, 40, 41, 42, 0, 0, 0, 45, 60,
379: 46, 0, 5, 6, 58, 43, 9, 44, 0, 47,
380: 61 };
381: #ifndef lint
382: static char yaccpar_sccsid[] = "@(#)yaccpar 1.2 86/07/18 SMI"; /* from UCB 4.1 83/02/11 */
383: #endif
384:
385: #
386: # define YYFLAG -1000
387: # define YYERROR goto yyerrlab
388: # define YYACCEPT return(0)
389: # define YYABORT return(1)
390:
391: /* parser for yacc output */
392:
393: #ifdef YYDEBUG
394: int yydebug = 0; /* 1 for debugging */
395: #endif
396: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
397: int yychar = -1; /* current input token number */
398: int yynerrs = 0; /* number of errors */
399: short yyerrflag = 0; /* error recovery flag */
400:
401: yyparse() {
402:
403: short yys[YYMAXDEPTH];
404: short yyj, yym;
405: register YYSTYPE *yypvt;
406: register short yystate, *yyps, yyn;
407: register YYSTYPE *yypv;
408: register short *yyxi;
409:
410: yystate = 0;
411: yychar = -1;
412: yynerrs = 0;
413: yyerrflag = 0;
414: yyps= &yys[-1];
415: yypv= &yyv[-1];
416:
417: yystack: /* put a state and value onto the stack */
418:
419: #ifdef YYDEBUG
420: if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
421: #endif
422: if( ++yyps>= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
423: *yyps = yystate;
424: ++yypv;
425: *yypv = yyval;
426:
427: yynewstate:
428:
429: yyn = yypact[yystate];
430:
431: if( yyn<= YYFLAG ) goto yydefault; /* simple state */
432:
433: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
434: if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
435:
436: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
437: yychar = -1;
438: yyval = yylval;
439: yystate = yyn;
440: if( yyerrflag > 0 ) --yyerrflag;
441: goto yystack;
442: }
443:
444: yydefault:
445: /* default state action */
446:
447: if( (yyn=yydef[yystate]) == -2 ) {
448: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
449: /* look through exception table */
450:
451: for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
452:
453: while( *(yyxi+=2) >= 0 ){
454: if( *yyxi == yychar ) break;
455: }
456: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
457: }
458:
459: if( yyn == 0 ){ /* error */
460: /* error ... attempt to resume parsing */
461:
462: switch( yyerrflag ){
463:
464: case 0: /* brand new error */
465:
466: yyerror( "syntax error" );
467: yyerrlab:
468: ++yynerrs;
469:
470: case 1:
471: case 2: /* incompletely recovered error ... try again */
472:
473: yyerrflag = 3;
474:
475: /* find a state where "error" is a legal shift action */
476:
477: while ( yyps >= yys ) {
478: yyn = yypact[*yyps] + YYERRCODE;
479: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
480: yystate = yyact[yyn]; /* simulate a shift of "error" */
481: goto yystack;
482: }
483: yyn = yypact[*yyps];
484:
485: /* the current yyps has no shift onn "error", pop stack */
486:
487: #ifdef YYDEBUG
488: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
489: #endif
490: --yyps;
491: --yypv;
492: }
493:
494: /* there is no state on the stack with an error shift ... abort */
495:
496: yyabort:
497: return(1);
498:
499:
500: case 3: /* no shift yet; clobber input char */
501:
502: #ifdef YYDEBUG
503: if( yydebug ) printf( "error recovery discards char %d\n", yychar );
504: #endif
505:
506: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
507: yychar = -1;
508: goto yynewstate; /* try again in the same state */
509:
510: }
511:
512: }
513:
514: /* reduction by production yyn */
515:
516: #ifdef YYDEBUG
517: if( yydebug ) printf("reduce %d\n",yyn);
518: #endif
519: yyps -= yyr2[yyn];
520: yypvt = yypv;
521: yypv -= yyr2[yyn];
522: yyval = yypv[1];
523: yym=yyn;
524: /* consult goto table to find next state */
525: yyn = yyr1[yyn];
526: yyj = yypgo[yyn] + *yyps + 1;
527: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
528: switch(yym){
529:
530: case 1:
531: { DotDot=0; } break;
532: case 2:
533: { yyres = (long) yypvt[-1].ee; } break;
534: case 3:
535: { DotDot=1; } break;
536: case 4:
537: { yyres = (long) yypvt[-1].ee; } break;
538: case 5:
539: { yyres = (long) yypvt[-1].ee; } break;
540: case 6:
541: { yyres = (long) yypvt[-1].ee; } break;
542: case 7:
543: { yyres = (long) yypvt[-1].ee; } break;
544: case 8:
545: { if( !CurrentExpr){
546: yyerror("$ cannot be used here");
547: YYACCEPT;
548: }
549: yyval.ee = CurrentExpr;
550: } break;
551: case 9:
552: { yyval.ee = E_Binary( yypvt[-2].ee, O_ENV, E_Id(yypvt[-0].ss) ); } break;
553: case 10:
554: { yyval.ee = E_Id( yypvt[-0].ss ); } break;
555: case 11:
556: { yyval.ee = E_DConst( yypvt[-0].dd ); } break;
557: case 12:
558: { yyval.ee = E_IConst( yypvt[-0].ll ); } break;
559: case 13:
560: { yyval.ee = E_Unary( O_DEREF, yypvt[-0].ee ); } break;
561: case 14:
562: { yyval.ee = E_Unary( O_REF, yypvt[-0].ee ); } break;
563: case 15:
564: { yyval.ee = E_Unary( O_SIZEOF, yypvt[-0].ee ); } break;
565: case 16:
566: { yyval.ee = E_Unary( O_TYPEOF, yypvt[-0].ee ); } break;
567: case 17:
568: { yyval.ee = E_Unary( O_LOGNOT, yypvt[-0].ee ); } break;
569: case 18:
570: { yyval.ee = E_Unary( O_MINUS, yypvt[-0].ee ); } break;
571: case 19:
572: { yyval.ee = E_Unary( O_1SCOMP, yypvt[-0].ee ); } break;
573: case 20:
574: { if( !DotDot ){
575: yyerror(".. cannot be used here");
576: YYACCEPT;
577: }
578: yyval.ee = E_Binary( yypvt[-2].ee, O_RANGE, yypvt[-0].ee );} break;
579: case 21:
580: { yyval.ee = E_Binary( yypvt[-2].ee, O_DOT, E_Id(yypvt[-0].ss)); } break;
581: case 22:
582: { yyval.ee = E_Binary( yypvt[-2].ee, O_COMMA, yypvt[-0].ee ); } break;
583: case 23:
584: { yyval.ee = E_Binary( yypvt[-2].ee, O_ASSIGN, yypvt[-0].ee ); } break;
585: case 24:
586: { yyval.ee = E_Binary( yypvt[-2].ee, O_LOGOR, yypvt[-0].ee ); } break;
587: case 25:
588: { yyval.ee = E_Binary( yypvt[-2].ee, O_LOGAND, yypvt[-0].ee ); } break;
589: case 26:
590: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITOR, yypvt[-0].ee ); } break;
591: case 27:
592: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITAND, yypvt[-0].ee ); } break;
593: case 28:
594: { yyval.ee = E_Binary( yypvt[-2].ee, O_BITXOR, yypvt[-0].ee ); } break;
595: case 29:
596: { yyval.ee = E_Binary( yypvt[-2].ee, O_EQ, yypvt[-0].ee ); } break;
597: case 30:
598: { yyval.ee = E_Binary( yypvt[-2].ee, O_NE, yypvt[-0].ee ); } break;
599: case 31:
600: { yyval.ee = E_Binary( yypvt[-2].ee, O_LT, yypvt[-0].ee ); } break;
601: case 32:
602: { yyval.ee = E_Binary( yypvt[-2].ee, O_GT, yypvt[-0].ee ); } break;
603: case 33:
604: { yyval.ee = E_Binary( yypvt[-2].ee, O_LE, yypvt[-0].ee ); } break;
605: case 34:
606: { yyval.ee = E_Binary( yypvt[-2].ee, O_GE, yypvt[-0].ee ); } break;
607: case 35:
608: { yyval.ee = E_Binary( yypvt[-2].ee, O_RSHIFT, yypvt[-0].ee ); } break;
609: case 36:
610: { yyval.ee = E_Binary( yypvt[-2].ee, O_LSHIFT, yypvt[-0].ee ); } break;
611: case 37:
612: { yyval.ee = E_Binary( yypvt[-2].ee, O_MINUS, yypvt[-0].ee ); } break;
613: case 38:
614: { yyval.ee = E_Binary( yypvt[-2].ee, O_ARROW, E_Id(yypvt[-0].ss)); } break;
615: case 39:
616: { yyval.ee = E_Binary( yypvt[-2].ee, O_MOD, yypvt[-0].ee ); } break;
617: case 40:
618: { yyval.ee = E_Binary( yypvt[-2].ee, O_MULT, yypvt[-0].ee ); } break;
619: case 41:
620: { yyval.ee = E_Binary( yypvt[-2].ee, O_DIV, yypvt[-0].ee ); } break;
621: case 42:
622: { yyval.ee = E_Binary( yypvt[-2].ee, O_PLUS, yypvt[-0].ee ); } break;
623: case 43:
624: { yyval.ee = E_Binary( yypvt[-3].ee, O_INDEX, yypvt[-1].ee );} break;
625: case 44:
626: { yyval.ee = E_Binary( E_Id(yypvt[-3].ss), O_CALL, yypvt[-1].ee ); } break;
627: case 45:
628: { yyval.ee = E_Binary( E_Id(yypvt[-2].ss), O_CALL, 0 ); } break;
629: case 46:
630: { yyval.ee = yypvt[-1].ee; } break;
631: case 47:
632: { yyval.ee = E_Unary( O_FABS, yypvt[-1].ee ); } break;
633: case 48:
634: { if( !CurrentExpr){
635: yyerror("no current expression for $");
636: YYACCEPT;
637: }
638: yyval.ee = CurrentExpr;
639: } break;
640: case 49:
641: { yyval.ee = E_Id( yypvt[-0].ss ); } break;
642: case 50:
643: { yyval.ee = E_IConst( yypvt[-0].ll ); } break;
644: case 51:
645: { yyval.ee = E_Unary( O_REF, yypvt[-0].ee ); } break;
646: case 52:
647: { yyval.ee = E_Unary( O_MINUS, yypvt[-0].ee ); } break;
648: case 53:
649: { yyval.ee = E_Binary( yypvt[-2].ee, O_MINUS, yypvt[-0].ee ); } break;
650: case 54:
651: { yyval.ee = E_Binary( yypvt[-2].ee, O_MOD, yypvt[-0].ee ); } break;
652: case 55:
653: { yyval.ee = E_Binary( yypvt[-2].ee, O_MULT, yypvt[-0].ee ); } break;
654: case 56:
655: { yyval.ee = E_Binary( yypvt[-2].ee, O_DIV, yypvt[-0].ee ); } break;
656: case 57:
657: { yyval.ee = E_Binary( yypvt[-2].ee, O_PLUS, yypvt[-0].ee ); } break;
658: case 58:
659: { yyval.ee = E_Binary( yypvt[-3].ee, O_INDEX, yypvt[-1].ee );} break;
660: case 59:
661: { yyval.ee = yypvt[-1].ee; } break;
662: case 60:
663: { yyval.ee = yypvt[-0].ee; } break;
664: case 61:
665: { yyval.ee = E_Binary( yypvt[-2].ee, O_COMMA, yypvt[-0].ee ); } break;
666: }
667: goto yystack; /* stack new state and value */
668:
669: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.