defines2.calc.c revision 1.1.1.4 1 /* $NetBSD: defines2.calc.c,v 1.1.1.4 2026/01/18 16:39:08 christos Exp $ */
2
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6
7 #define YYBYACC 1
8 #define YYMAJOR 2
9 #define YYMINOR 0
10 #define YYCHECK "yyyymmdd"
11
12 #define YYEMPTY (-1)
13 #define yyclearin (yychar = YYEMPTY)
14 #define yyerrok (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM (-2)
17 #define YYEOF 0
18 #undef YYBTYACC
19 #define YYBTYACC 0
20 #define YYDEBUGSTR YYPREFIX "debug"
21 #define YYPREFIX "yy"
22
23 #define YYPURE 0
24
25 #line 2 "calc.y"
26 # include <stdio.h>
27 # include <ctype.h>
28
29 int regs[26];
30 int base;
31
32 extern int yylex(void);
33 static void yyerror(const char *s);
34
35 #line 34 "y.tab.c"
36
37 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
38 /* Default: YYSTYPE is the semantic value type. */
39 typedef int YYSTYPE;
40 # define YYSTYPE_IS_DECLARED 1
41 #endif
42
43 /* compatibility with bison */
44 #ifdef YYPARSE_PARAM
45 /* compatibility with FreeBSD */
46 # ifdef YYPARSE_PARAM_TYPE
47 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
48 # else
49 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
50 # endif
51 #else
52 # define YYPARSE_DECL() yyparse(void)
53 #endif
54
55 /* Parameters sent to lex. */
56 #ifdef YYLEX_PARAM
57 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
58 # define YYLEX yylex(YYLEX_PARAM)
59 #else
60 # define YYLEX_DECL() yylex(void)
61 # define YYLEX yylex()
62 #endif
63
64 #if !(defined(yylex) || defined(YYSTATE))
65 int YYLEX_DECL();
66 #endif
67
68 /* Parameters sent to yyerror. */
69 #ifndef YYERROR_DECL
70 #define YYERROR_DECL() yyerror(const char *s)
71 #endif
72 #ifndef YYERROR_CALL
73 #define YYERROR_CALL(msg) yyerror(msg)
74 #endif
75
76 extern int YYPARSE_DECL();
77
78 #define DIGIT 257
79 #define LETTER 258
80 #define UMINUS 259
81 #define YYERRCODE 256
82 typedef int YYINT;
83 static const YYINT yylhs[] = { -1,
84 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
85 2, 2, 2, 2, 2, 2, 3, 3,
86 };
87 static const YYINT yylen[] = { 2,
88 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
89 3, 3, 3, 2, 1, 1, 1, 2,
90 };
91 static const YYINT yydefred[] = { 1,
92 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
93 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
94 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
95 10, 11,
96 };
97 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
98 static const YYINT yystos[] = { 0,
99 261, 256, 257, 258, 45, 40, 262, 263, 264, 10,
100 61, 258, 263, 263, 10, 124, 38, 43, 45, 42,
101 47, 37, 257, 263, 41, 263, 263, 263, 263, 263,
102 263, 263,
103 };
104 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
105 static const YYINT yydgoto[] = { 1,
106 7, 8, 9,
107 };
108 static const YYINT yysindex[] = { 0,
109 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
110 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
111 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
112 0, 0,
113 };
114 static const YYINT yyrindex[] = { 0,
115 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
117 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
118 0, 0,
119 };
120 #if YYBTYACC
121 static const YYINT yycindex[] = { 0,
122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
125 0, 0,
126 };
127 #endif
128 static const YYINT yygindex[] = { 0,
129 0, 65, 0,
130 };
131 #define YYTABLESIZE 220
132 static const YYINT yytable[] = { 6,
133 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
134 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
135 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
136 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
137 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
138 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
139 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
140 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
141 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
142 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
143 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
144 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
145 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
146 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
147 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
154 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
155 };
156 static const YYINT yycheck[] = { 40,
157 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
158 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
159 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
160 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
161 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
162 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
163 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
164 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
165 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
166 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
167 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
168 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
169 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
170 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
171 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
172 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
173 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
174 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
175 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
176 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
177 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
178 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
179 };
180 #if YYBTYACC
181 static const YYINT yyctable[] = { -1,
182 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
183 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
184 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
185 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
186 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
187 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
188 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
189 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
190 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
191 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
192 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
193 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
194 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
195 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
196 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
197 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
198 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
199 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
200 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
201 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
202 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
203 -1, -1, -1, -1, -1, -1, -1, -1, -1,
204 };
205 #endif
206 #define YYFINAL 1
207 #ifndef YYDEBUG
208 #define YYDEBUG 0
209 #endif
210 #define YYMAXTOKEN 259
211 #define YYUNDFTOKEN 265
212 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
213 #if YYDEBUG
214 #ifndef NULL
215 #define NULL (void*)0
216 #endif
217 static const char *const yyname[] = {
218
219 "$end",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'\\n'",NULL,NULL,NULL,NULL,
220 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
221 NULL,NULL,NULL,NULL,NULL,NULL,"'%'","'&'",NULL,"'('","')'","'*'","'+'",NULL,
222 "'-'",NULL,"'/'",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
223 NULL,"'='",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
224 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
225 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
226 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
227 NULL,"'|'",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
228 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
229 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
230 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
231 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
232 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
233 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
234 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
235 NULL,NULL,NULL,NULL,NULL,NULL,"error","DIGIT","LETTER","UMINUS","$accept",
236 "list","stat","expr","number","illegal-symbol",
237 };
238 static const char *const yyrule[] = {
239 "$accept : list",
240 "list :",
241 "list : list stat '\\n'",
242 "list : list error '\\n'",
243 "stat : expr",
244 "stat : LETTER '=' expr",
245 "expr : '(' expr ')'",
246 "expr : expr '+' expr",
247 "expr : expr '-' expr",
248 "expr : expr '*' expr",
249 "expr : expr '/' expr",
250 "expr : expr '%' expr",
251 "expr : expr '&' expr",
252 "expr : expr '|' expr",
253 "expr : '-' expr",
254 "expr : LETTER",
255 "expr : number",
256 "number : DIGIT",
257 "number : number DIGIT",
258
259 };
260 #endif
261
262 #if YYDEBUG
263 int yydebug;
264 #endif
265
266 int yyerrflag;
267 int yychar;
268 YYSTYPE yyval;
269 YYSTYPE yylval;
270 int yynerrs;
271
272 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
273 YYLTYPE yyloc; /* position returned by actions */
274 YYLTYPE yylloc; /* position from the lexer */
275 #endif
276
277 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
278 #ifndef YYLLOC_DEFAULT
279 #define YYLLOC_DEFAULT(loc, rhs, n) \
280 do \
281 { \
282 if (n == 0) \
283 { \
284 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
285 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
286 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
287 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
288 } \
289 else \
290 { \
291 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
292 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
293 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
294 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
295 } \
296 } while (0)
297 #endif /* YYLLOC_DEFAULT */
298 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
299 #if YYBTYACC
300
301 #ifndef YYLVQUEUEGROWTH
302 #define YYLVQUEUEGROWTH 32
303 #endif
304 #endif /* YYBTYACC */
305
306 /* define the initial stack-sizes */
307 #ifdef YYSTACKSIZE
308 #undef YYMAXDEPTH
309 #define YYMAXDEPTH YYSTACKSIZE
310 #else
311 #ifdef YYMAXDEPTH
312 #define YYSTACKSIZE YYMAXDEPTH
313 #else
314 #define YYSTACKSIZE 10000
315 #define YYMAXDEPTH 10000
316 #endif
317 #endif
318
319 #ifndef YYINITSTACKSIZE
320 #define YYINITSTACKSIZE 200
321 #endif
322
323 typedef struct {
324 unsigned stacksize;
325 YYINT *s_base;
326 YYINT *s_mark;
327 YYINT *s_last;
328 YYSTYPE *l_base;
329 YYSTYPE *l_mark;
330 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
331 YYLTYPE *p_base;
332 YYLTYPE *p_mark;
333 #endif
334 } YYSTACKDATA;
335 #if YYBTYACC
336
337 struct YYParseState_s
338 {
339 struct YYParseState_s *save; /* Previously saved parser state */
340 YYSTACKDATA yystack; /* saved parser stack */
341 int state; /* saved parser state */
342 int errflag; /* saved error recovery status */
343 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
344 YYINT ctry; /* saved index in yyctable[] for this conflict */
345 };
346 typedef struct YYParseState_s YYParseState;
347 #endif /* YYBTYACC */
348 /* variables for the parser stack */
349 static YYSTACKDATA yystack;
350 #if YYBTYACC
351
352 /* Current parser state */
353 static YYParseState *yyps = NULL;
354
355 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
356 static YYParseState *yypath = NULL;
357
358 /* Base of the lexical value queue */
359 static YYSTYPE *yylvals = NULL;
360
361 /* Current position at lexical value queue */
362 static YYSTYPE *yylvp = NULL;
363
364 /* End position of lexical value queue */
365 static YYSTYPE *yylve = NULL;
366
367 /* The last allocated position at the lexical value queue */
368 static YYSTYPE *yylvlim = NULL;
369
370 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
371 /* Base of the lexical position queue */
372 static YYLTYPE *yylpsns = NULL;
373
374 /* Current position at lexical position queue */
375 static YYLTYPE *yylpp = NULL;
376
377 /* End position of lexical position queue */
378 static YYLTYPE *yylpe = NULL;
379
380 /* The last allocated position at the lexical position queue */
381 static YYLTYPE *yylplim = NULL;
382 #endif
383
384 /* Current position at lexical token queue */
385 static YYINT *yylexp = NULL;
386
387 static YYINT *yylexemes = NULL;
388 #endif /* YYBTYACC */
389 #line 66 "calc.y"
390 /* start of programs */
391
392 int
393 main (void)
394 {
395 while(!feof(stdin)) {
396 yyparse();
397 }
398 return 0;
399 }
400
401 static void
402 yyerror(const char *s)
403 {
404 fprintf(stderr, "%s\n", s);
405 }
406
407 int
408 yylex(void)
409 {
410 /* lexical analysis routine */
411 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
412 /* return DIGIT for a digit, yylval = 0 through 9 */
413 /* all other characters are returned immediately */
414
415 int c;
416
417 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
418
419 /* c is now nonblank */
420
421 if( islower( c )) {
422 yylval = c - 'a';
423 return ( LETTER );
424 }
425 if( isdigit( c )) {
426 yylval = c - '0';
427 return ( DIGIT );
428 }
429 return( c );
430 }
431 #line 430 "y.tab.c"
432
433 /* For use in generated program */
434 #define yydepth (int)(yystack.s_mark - yystack.s_base)
435 #if YYBTYACC
436 #define yytrial (yyps->save)
437 #endif /* YYBTYACC */
438
439 #if YYDEBUG
440 #include <stdio.h> /* needed for printf */
441 #endif
442
443 #include <stdlib.h> /* needed for malloc, etc */
444 #include <string.h> /* needed for memset */
445
446 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
447 static int yygrowstack(YYSTACKDATA *data)
448 {
449 int i;
450 unsigned newsize;
451 YYINT *newss;
452 YYSTYPE *newvs;
453 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
454 YYLTYPE *newps;
455 #endif
456
457 if ((newsize = data->stacksize) == 0)
458 newsize = YYINITSTACKSIZE;
459 else if (newsize >= YYMAXDEPTH)
460 return YYENOMEM;
461 else if ((newsize *= 2) > YYMAXDEPTH)
462 newsize = YYMAXDEPTH;
463
464 i = (int) (data->s_mark - data->s_base);
465 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
466 if (newss == NULL)
467 return YYENOMEM;
468
469 data->s_base = newss;
470 data->s_mark = newss + i;
471
472 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
473 if (newvs == NULL)
474 return YYENOMEM;
475
476 data->l_base = newvs;
477 data->l_mark = newvs + i;
478
479 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
480 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
481 if (newps == NULL)
482 return YYENOMEM;
483
484 data->p_base = newps;
485 data->p_mark = newps + i;
486 #endif
487
488 data->stacksize = newsize;
489 data->s_last = data->s_base + newsize - 1;
490
491 #if YYDEBUG
492 if (yydebug)
493 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
494 #endif
495 return 0;
496 }
497
498 #if YYPURE || defined(YY_NO_LEAKS)
499 static void yyfreestack(YYSTACKDATA *data)
500 {
501 free(data->s_base);
502 free(data->l_base);
503 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
504 free(data->p_base);
505 #endif
506 memset(data, 0, sizeof(*data));
507 }
508 #else
509 #define yyfreestack(data) /* nothing */
510 #endif /* YYPURE || defined(YY_NO_LEAKS) */
511 #if YYBTYACC
512
513 static YYParseState *
514 yyNewState(unsigned size)
515 {
516 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
517 if (p == NULL) return NULL;
518
519 p->yystack.stacksize = size;
520 if (size == 0)
521 {
522 p->yystack.s_base = NULL;
523 p->yystack.l_base = NULL;
524 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
525 p->yystack.p_base = NULL;
526 #endif
527 return p;
528 }
529 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
530 if (p->yystack.s_base == NULL) return NULL;
531 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
532 if (p->yystack.l_base == NULL) return NULL;
533 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
534 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
535 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
536 if (p->yystack.p_base == NULL) return NULL;
537 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
538 #endif
539
540 return p;
541 }
542
543 static void
544 yyFreeState(YYParseState *p)
545 {
546 yyfreestack(&p->yystack);
547 free(p);
548 }
549 #endif /* YYBTYACC */
550
551 #define YYABORT goto yyabort
552 #define YYREJECT goto yyabort
553 #define YYACCEPT goto yyaccept
554 #define YYERROR goto yyerrlab
555 #if YYBTYACC
556 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
557 #define YYVALID_NESTED do { if (yyps->save && \
558 yyps->save->save == 0) goto yyvalid; } while(0)
559 #endif /* YYBTYACC */
560
561 int
562 YYPARSE_DECL()
563 {
564 int yym, yyn, yystate, yyresult;
565 #if YYBTYACC
566 int yynewerrflag;
567 YYParseState *yyerrctx = NULL;
568 #endif /* YYBTYACC */
569 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
570 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
571 #endif
572 #if YYDEBUG
573 const char *yys;
574
575 if ((yys = getenv("YYDEBUG")) != NULL)
576 {
577 yyn = *yys;
578 if (yyn >= '0' && yyn <= '9')
579 yydebug = yyn - '0';
580 }
581 if (yydebug)
582 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
583 #endif
584 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
585 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
586 #endif
587
588 #if YYBTYACC
589 yyps = yyNewState(0); if (yyps == NULL) goto yyenomem;
590 yyps->save = NULL;
591 #endif /* YYBTYACC */
592 yym = 0;
593 /* yyn is set below */
594 yynerrs = 0;
595 yyerrflag = 0;
596 yychar = YYEMPTY;
597 yystate = 0;
598
599 #if YYPURE
600 memset(&yystack, 0, sizeof(yystack));
601 #endif
602
603 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
604 yystack.s_mark = yystack.s_base;
605 yystack.l_mark = yystack.l_base;
606 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
607 yystack.p_mark = yystack.p_base;
608 #endif
609 yystate = 0;
610 *yystack.s_mark = 0;
611
612 yyloop:
613 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
614 if (yychar < 0)
615 {
616 #if YYBTYACC
617 do {
618 if (yylvp < yylve)
619 {
620 /* we're currently re-reading tokens */
621 yylval = *yylvp++;
622 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
623 yylloc = *yylpp++;
624 #endif
625 yychar = *yylexp++;
626 break;
627 }
628 if (yyps->save)
629 {
630 /* in trial mode; save scanner results for future parse attempts */
631 if (yylvp == yylvlim)
632 { /* Enlarge lexical value queue */
633 size_t p = (size_t) (yylvp - yylvals);
634 size_t s = (size_t) (yylvlim - yylvals);
635
636 s += YYLVQUEUEGROWTH;
637 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
638 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
639 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
640 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
641 #endif
642 yylvp = yylve = yylvals + p;
643 yylvlim = yylvals + s;
644 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
645 yylpp = yylpe = yylpsns + p;
646 yylplim = yylpsns + s;
647 #endif
648 yylexp = yylexemes + p;
649 }
650 *yylexp = (YYINT) YYLEX;
651 *yylvp++ = yylval;
652 yylve++;
653 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
654 *yylpp++ = yylloc;
655 yylpe++;
656 #endif
657 yychar = *yylexp++;
658 break;
659 }
660 /* normal operation, no conflict encountered */
661 #endif /* YYBTYACC */
662 yychar = YYLEX;
663 #if YYBTYACC
664 } while (0);
665 #endif /* YYBTYACC */
666 if (yychar < 0) yychar = YYEOF;
667 #if YYDEBUG
668 if (yydebug)
669 {
670 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
671 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
672 YYDEBUGSTR, yydepth, yystate, yychar, yys);
673 #ifdef YYSTYPE_TOSTRING
674 #if YYBTYACC
675 if (!yytrial)
676 #endif /* YYBTYACC */
677 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
678 #endif
679 fputc('\n', stderr);
680 }
681 #endif
682 }
683 #if YYBTYACC
684
685 /* Do we have a conflict? */
686 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
687 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
688 {
689 YYINT ctry;
690
691 if (yypath)
692 {
693 YYParseState *save;
694 #if YYDEBUG
695 if (yydebug)
696 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
697 YYDEBUGSTR, yydepth, yystate);
698 #endif
699 /* Switch to the next conflict context */
700 save = yypath;
701 yypath = save->save;
702 save->save = NULL;
703 ctry = save->ctry;
704 if (save->state != yystate) YYABORT;
705 yyFreeState(save);
706
707 }
708 else
709 {
710
711 /* Unresolved conflict - start/continue trial parse */
712 YYParseState *save;
713 #if YYDEBUG
714 if (yydebug)
715 {
716 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
717 if (yyps->save)
718 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
719 else
720 fputs("Starting trial parse.\n", stderr);
721 }
722 #endif
723 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
724 if (save == NULL) goto yyenomem;
725 save->save = yyps->save;
726 save->state = yystate;
727 save->errflag = yyerrflag;
728 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
729 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
730 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
731 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
732 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
733 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
734 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
735 #endif
736 ctry = yytable[yyn];
737 if (yyctable[ctry] == -1)
738 {
739 #if YYDEBUG
740 if (yydebug && yychar >= YYEOF)
741 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
742 #endif
743 ctry++;
744 }
745 save->ctry = ctry;
746 if (yyps->save == NULL)
747 {
748 /* If this is a first conflict in the stack, start saving lexemes */
749 if (!yylexemes)
750 {
751 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
752 if (yylexemes == NULL) goto yyenomem;
753 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
754 if (yylvals == NULL) goto yyenomem;
755 yylvlim = yylvals + YYLVQUEUEGROWTH;
756 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
757 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
758 if (yylpsns == NULL) goto yyenomem;
759 yylplim = yylpsns + YYLVQUEUEGROWTH;
760 #endif
761 }
762 if (yylvp == yylve)
763 {
764 yylvp = yylve = yylvals;
765 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
766 yylpp = yylpe = yylpsns;
767 #endif
768 yylexp = yylexemes;
769 if (yychar >= YYEOF)
770 {
771 *yylve++ = yylval;
772 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
773 *yylpe++ = yylloc;
774 #endif
775 *yylexp = (YYINT) yychar;
776 yychar = YYEMPTY;
777 }
778 }
779 }
780 if (yychar >= YYEOF)
781 {
782 yylvp--;
783 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
784 yylpp--;
785 #endif
786 yylexp--;
787 yychar = YYEMPTY;
788 }
789 save->lexeme = (int) (yylvp - yylvals);
790 yyps->save = save;
791 }
792 if (yytable[yyn] == ctry)
793 {
794 #if YYDEBUG
795 if (yydebug)
796 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
797 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
798 #endif
799 if (yychar < 0)
800 {
801 yylvp++;
802 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
803 yylpp++;
804 #endif
805 yylexp++;
806 }
807 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
808 goto yyoverflow;
809 yystate = yyctable[ctry];
810 *++yystack.s_mark = (YYINT) yystate;
811 *++yystack.l_mark = yylval;
812 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
813 *++yystack.p_mark = yylloc;
814 #endif
815 yychar = YYEMPTY;
816 if (yyerrflag > 0) --yyerrflag;
817 goto yyloop;
818 }
819 else
820 {
821 yyn = yyctable[ctry];
822 goto yyreduce;
823 }
824 } /* End of code dealing with conflicts */
825 #endif /* YYBTYACC */
826 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
827 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
828 {
829 #if YYDEBUG
830 if (yydebug)
831 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
832 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
833 #endif
834 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
835 yystate = yytable[yyn];
836 *++yystack.s_mark = yytable[yyn];
837 *++yystack.l_mark = yylval;
838 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
839 *++yystack.p_mark = yylloc;
840 #endif
841 yychar = YYEMPTY;
842 if (yyerrflag > 0) --yyerrflag;
843 goto yyloop;
844 }
845 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
846 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
847 {
848 yyn = yytable[yyn];
849 goto yyreduce;
850 }
851 if (yyerrflag != 0) goto yyinrecovery;
852 #if YYBTYACC
853
854 yynewerrflag = 1;
855 goto yyerrhandler;
856 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
857
858 yyerrlab:
859 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
860 * before looking for error recovery */
861 yystack.s_mark -= yym;
862 yystate = *yystack.s_mark;
863 yystack.l_mark -= yym;
864 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
865 yystack.p_mark -= yym;
866 #endif
867
868 yynewerrflag = 0;
869 yyerrhandler:
870 while (yyps->save)
871 {
872 int ctry;
873 YYParseState *save = yyps->save;
874 #if YYDEBUG
875 if (yydebug)
876 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
877 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
878 (int)(yylvp - yylvals - yyps->save->lexeme));
879 #endif
880 /* Memorize most forward-looking error state in case it's really an error. */
881 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
882 {
883 /* Free old saved error context state */
884 if (yyerrctx) yyFreeState(yyerrctx);
885 /* Create and fill out new saved error context state */
886 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
887 if (yyerrctx == NULL) goto yyenomem;
888 yyerrctx->save = yyps->save;
889 yyerrctx->state = yystate;
890 yyerrctx->errflag = yyerrflag;
891 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
892 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
893 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
894 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
895 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
896 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
897 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
898 #endif
899 yyerrctx->lexeme = (int) (yylvp - yylvals);
900 }
901 yylvp = yylvals + save->lexeme;
902 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
903 yylpp = yylpsns + save->lexeme;
904 #endif
905 yylexp = yylexemes + save->lexeme;
906 yychar = YYEMPTY;
907 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
908 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
909 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
910 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
911 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
912 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
913 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
914 #endif
915 ctry = ++save->ctry;
916 yystate = save->state;
917 /* We tried shift, try reduce now */
918 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
919 yyps->save = save->save;
920 save->save = NULL;
921 yyFreeState(save);
922
923 /* Nothing left on the stack -- error */
924 if (!yyps->save)
925 {
926 #if YYDEBUG
927 if (yydebug)
928 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
929 YYPREFIX, yydepth);
930 #endif
931 /* Restore state as it was in the most forward-advanced error */
932 yylvp = yylvals + yyerrctx->lexeme;
933 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
934 yylpp = yylpsns + yyerrctx->lexeme;
935 #endif
936 yylexp = yylexemes + yyerrctx->lexeme;
937 yychar = yylexp[-1];
938 yylval = yylvp[-1];
939 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
940 yylloc = yylpp[-1];
941 #endif
942 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
943 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
944 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
945 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
946 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
947 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
948 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
949 #endif
950 yystate = yyerrctx->state;
951 yyFreeState(yyerrctx);
952 yyerrctx = NULL;
953 }
954 yynewerrflag = 1;
955 }
956 if (yynewerrflag == 0) goto yyinrecovery;
957 #endif /* YYBTYACC */
958
959 YYERROR_CALL("syntax error");
960 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
961 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
962 #endif
963
964 #if !YYBTYACC
965 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
966 yyerrlab:
967 #endif
968 ++yynerrs;
969
970 yyinrecovery:
971 if (yyerrflag < 3)
972 {
973 yyerrflag = 3;
974 for (;;)
975 {
976 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
977 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
978 {
979 #if YYDEBUG
980 if (yydebug)
981 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
982 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
983 #endif
984 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
985 yystate = yytable[yyn];
986 *++yystack.s_mark = yytable[yyn];
987 *++yystack.l_mark = yylval;
988 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
989 /* lookahead position is error end position */
990 yyerror_loc_range[2] = yylloc;
991 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
992 *++yystack.p_mark = yyloc;
993 #endif
994 goto yyloop;
995 }
996 else
997 {
998 #if YYDEBUG
999 if (yydebug)
1000 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1001 YYDEBUGSTR, yydepth, *yystack.s_mark);
1002 #endif
1003 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1004 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1005 /* the current TOS position is the error start position */
1006 yyerror_loc_range[1] = *yystack.p_mark;
1007 #endif
1008 #if defined(YYDESTRUCT_CALL)
1009 #if YYBTYACC
1010 if (!yytrial)
1011 #endif /* YYBTYACC */
1012 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1013 YYDESTRUCT_CALL("error: discarding state",
1014 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1015 #else
1016 YYDESTRUCT_CALL("error: discarding state",
1017 yystos[*yystack.s_mark], yystack.l_mark);
1018 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1019 #endif /* defined(YYDESTRUCT_CALL) */
1020 --yystack.s_mark;
1021 --yystack.l_mark;
1022 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1023 --yystack.p_mark;
1024 #endif
1025 }
1026 }
1027 }
1028 else
1029 {
1030 if (yychar == YYEOF) goto yyabort;
1031 #if YYDEBUG
1032 if (yydebug)
1033 {
1034 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1035 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1036 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1037 }
1038 #endif
1039 #if defined(YYDESTRUCT_CALL)
1040 #if YYBTYACC
1041 if (!yytrial)
1042 #endif /* YYBTYACC */
1043 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1044 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1045 #else
1046 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1047 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1048 #endif /* defined(YYDESTRUCT_CALL) */
1049 yychar = YYEMPTY;
1050 goto yyloop;
1051 }
1052
1053 yyreduce:
1054 yym = yylen[yyn];
1055 #if YYDEBUG
1056 if (yydebug)
1057 {
1058 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1059 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1060 #ifdef YYSTYPE_TOSTRING
1061 #if YYBTYACC
1062 if (!yytrial)
1063 #endif /* YYBTYACC */
1064 if (yym > 0)
1065 {
1066 int i;
1067 fputc('<', stderr);
1068 for (i = yym; i > 0; i--)
1069 {
1070 if (i != yym) fputs(", ", stderr);
1071 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1072 yystack.l_mark[1-i]), stderr);
1073 }
1074 fputc('>', stderr);
1075 }
1076 #endif
1077 fputc('\n', stderr);
1078 }
1079 #endif
1080 if (yym > 0)
1081 yyval = yystack.l_mark[1-yym];
1082 else
1083 memset(&yyval, 0, sizeof yyval);
1084 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1085
1086 /* Perform position reduction */
1087 memset(&yyloc, 0, sizeof(yyloc));
1088 #if YYBTYACC
1089 if (!yytrial)
1090 #endif /* YYBTYACC */
1091 {
1092 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
1093 /* just in case YYERROR is invoked within the action, save
1094 the start of the rhs as the error start position */
1095 yyerror_loc_range[1] = yystack.p_mark[1-yym];
1096 }
1097 #endif
1098
1099 switch (yyn)
1100 {
1101 case 3:
1102 #line 28 "calc.y"
1103 { yyerrok ; }
1104 #line 1103 "y.tab.c"
1105 break;
1106 case 4:
1107 #line 32 "calc.y"
1108 { printf("%d\n",yystack.l_mark[0]);}
1109 #line 1108 "y.tab.c"
1110 break;
1111 case 5:
1112 #line 34 "calc.y"
1113 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
1114 #line 1113 "y.tab.c"
1115 break;
1116 case 6:
1117 #line 38 "calc.y"
1118 { yyval = yystack.l_mark[-1]; }
1119 #line 1118 "y.tab.c"
1120 break;
1121 case 7:
1122 #line 40 "calc.y"
1123 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
1124 #line 1123 "y.tab.c"
1125 break;
1126 case 8:
1127 #line 42 "calc.y"
1128 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
1129 #line 1128 "y.tab.c"
1130 break;
1131 case 9:
1132 #line 44 "calc.y"
1133 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
1134 #line 1133 "y.tab.c"
1135 break;
1136 case 10:
1137 #line 46 "calc.y"
1138 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
1139 #line 1138 "y.tab.c"
1140 break;
1141 case 11:
1142 #line 48 "calc.y"
1143 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
1144 #line 1143 "y.tab.c"
1145 break;
1146 case 12:
1147 #line 50 "calc.y"
1148 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
1149 #line 1148 "y.tab.c"
1150 break;
1151 case 13:
1152 #line 52 "calc.y"
1153 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
1154 #line 1153 "y.tab.c"
1155 break;
1156 case 14:
1157 #line 54 "calc.y"
1158 { yyval = - yystack.l_mark[0]; }
1159 #line 1158 "y.tab.c"
1160 break;
1161 case 15:
1162 #line 56 "calc.y"
1163 { yyval = regs[yystack.l_mark[0]]; }
1164 #line 1163 "y.tab.c"
1165 break;
1166 case 17:
1167 #line 61 "calc.y"
1168 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
1169 #line 1168 "y.tab.c"
1170 break;
1171 case 18:
1172 #line 63 "calc.y"
1173 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
1174 #line 1173 "y.tab.c"
1175 break;
1176 #line 1175 "y.tab.c"
1177 default:
1178 break;
1179 }
1180 yystack.s_mark -= yym;
1181 yystate = *yystack.s_mark;
1182 yystack.l_mark -= yym;
1183 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1184 yystack.p_mark -= yym;
1185 #endif
1186 yym = yylhs[yyn];
1187 if (yystate == 0 && yym == 0)
1188 {
1189 #if YYDEBUG
1190 if (yydebug)
1191 {
1192 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1193 #ifdef YYSTYPE_TOSTRING
1194 #if YYBTYACC
1195 if (!yytrial)
1196 #endif /* YYBTYACC */
1197 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1198 #endif
1199 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1200 }
1201 #endif
1202 yystate = YYFINAL;
1203 *++yystack.s_mark = YYFINAL;
1204 *++yystack.l_mark = yyval;
1205 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1206 *++yystack.p_mark = yyloc;
1207 #endif
1208 if (yychar < 0)
1209 {
1210 #if YYBTYACC
1211 do {
1212 if (yylvp < yylve)
1213 {
1214 /* we're currently re-reading tokens */
1215 yylval = *yylvp++;
1216 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1217 yylloc = *yylpp++;
1218 #endif
1219 yychar = *yylexp++;
1220 break;
1221 }
1222 if (yyps->save)
1223 {
1224 /* in trial mode; save scanner results for future parse attempts */
1225 if (yylvp == yylvlim)
1226 { /* Enlarge lexical value queue */
1227 size_t p = (size_t) (yylvp - yylvals);
1228 size_t s = (size_t) (yylvlim - yylvals);
1229
1230 s += YYLVQUEUEGROWTH;
1231 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1232 goto yyenomem;
1233 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1234 goto yyenomem;
1235 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1236 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1237 goto yyenomem;
1238 #endif
1239 yylvp = yylve = yylvals + p;
1240 yylvlim = yylvals + s;
1241 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1242 yylpp = yylpe = yylpsns + p;
1243 yylplim = yylpsns + s;
1244 #endif
1245 yylexp = yylexemes + p;
1246 }
1247 *yylexp = (YYINT) YYLEX;
1248 *yylvp++ = yylval;
1249 yylve++;
1250 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1251 *yylpp++ = yylloc;
1252 yylpe++;
1253 #endif
1254 yychar = *yylexp++;
1255 break;
1256 }
1257 /* normal operation, no conflict encountered */
1258 #endif /* YYBTYACC */
1259 yychar = YYLEX;
1260 #if YYBTYACC
1261 } while (0);
1262 #endif /* YYBTYACC */
1263 if (yychar < 0) yychar = YYEOF;
1264 #if YYDEBUG
1265 if (yydebug)
1266 {
1267 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1268 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1269 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1270 }
1271 #endif
1272 }
1273 if (yychar == YYEOF) goto yyaccept;
1274 goto yyloop;
1275 }
1276 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1277 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1278 yystate = yytable[yyn];
1279 else
1280 yystate = yydgoto[yym];
1281 #if YYDEBUG
1282 if (yydebug)
1283 {
1284 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1285 #ifdef YYSTYPE_TOSTRING
1286 #if YYBTYACC
1287 if (!yytrial)
1288 #endif /* YYBTYACC */
1289 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1290 #endif
1291 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1292 }
1293 #endif
1294 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1295 *++yystack.s_mark = (YYINT) yystate;
1296 *++yystack.l_mark = yyval;
1297 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1298 *++yystack.p_mark = yyloc;
1299 #endif
1300 goto yyloop;
1301 #if YYBTYACC
1302
1303 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1304 yyvalid:
1305 if (yypath) YYABORT;
1306 while (yyps->save)
1307 {
1308 YYParseState *save = yyps->save;
1309 yyps->save = save->save;
1310 save->save = yypath;
1311 yypath = save;
1312 }
1313 #if YYDEBUG
1314 if (yydebug)
1315 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1316 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1317 #endif
1318 if (yyerrctx)
1319 {
1320 yyFreeState(yyerrctx);
1321 yyerrctx = NULL;
1322 }
1323 yylvp = yylvals + yypath->lexeme;
1324 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1325 yylpp = yylpsns + yypath->lexeme;
1326 #endif
1327 yylexp = yylexemes + yypath->lexeme;
1328 yychar = YYEMPTY;
1329 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1330 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1331 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1332 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1333 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1334 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1335 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1336 #endif
1337 yystate = yypath->state;
1338 goto yyloop;
1339 #endif /* YYBTYACC */
1340
1341 yyoverflow:
1342 YYERROR_CALL("yacc stack overflow");
1343 #if YYBTYACC
1344 goto yyabort_nomem;
1345 yyenomem:
1346 YYERROR_CALL("memory exhausted");
1347 yyabort_nomem:
1348 #endif /* YYBTYACC */
1349 yyresult = 2;
1350 goto yyreturn;
1351
1352 yyabort:
1353 yyresult = 1;
1354 goto yyreturn;
1355
1356 yyaccept:
1357 #if YYBTYACC
1358 if (yyps->save) goto yyvalid;
1359 #endif /* YYBTYACC */
1360 yyresult = 0;
1361
1362 yyreturn:
1363 #if defined(YYDESTRUCT_CALL)
1364 if (yychar != YYEOF && yychar != YYEMPTY)
1365 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1366 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1367 #else
1368 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1369 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1370
1371 {
1372 YYSTYPE *pv;
1373 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1374 YYLTYPE *pp;
1375
1376 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1377 YYDESTRUCT_CALL("cleanup: discarding state",
1378 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1379 #else
1380 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1381 YYDESTRUCT_CALL("cleanup: discarding state",
1382 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1383 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1384 }
1385 #endif /* defined(YYDESTRUCT_CALL) */
1386
1387 #if YYBTYACC
1388 if (yyerrctx)
1389 {
1390 yyFreeState(yyerrctx);
1391 yyerrctx = NULL;
1392 }
1393 while (yyps)
1394 {
1395 YYParseState *save = yyps;
1396 yyps = save->save;
1397 save->save = NULL;
1398 yyFreeState(save);
1399 }
1400 while (yypath)
1401 {
1402 YYParseState *save = yypath;
1403 yypath = save->save;
1404 save->save = NULL;
1405 yyFreeState(save);
1406 }
1407 #endif /* YYBTYACC */
1408 yyfreestack(&yystack);
1409 return (yyresult);
1410 }
1411