1 /* original parser id follows */
2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
4
5 #define YYBYACC 1
6 #define YYMAJOR 2
7 #define YYMINOR 0
8 #define YYCHECK "yyyymmdd"
9
10 #define YYEMPTY (-1)
11 #define yyclearin (yychar = YYEMPTY)
12 #define yyerrok (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
14 #define YYENOMEM (-2)
15 #define YYEOF 0
16
17 #ifndef yyparse
18 #define yyparse calc3_parse
19 #endif /* yyparse */
20
21 #ifndef yylex
22 #define yylex calc3_lex
23 #endif /* yylex */
24
25 #ifndef yyerror
26 #define yyerror calc3_error
27 #endif /* yyerror */
28
29 #ifndef yychar
30 #define yychar calc3_char
31 #endif /* yychar */
32
33 #ifndef yyval
34 #define yyval calc3_val
35 #endif /* yyval */
36
37 #ifndef yylval
38 #define yylval calc3_lval
39 #endif /* yylval */
40
41 #ifndef yydebug
42 #define yydebug calc3_debug
43 #endif /* yydebug */
44
45 #ifndef yynerrs
46 #define yynerrs calc3_nerrs
47 #endif /* yynerrs */
48
49 #ifndef yyerrflag
50 #define yyerrflag calc3_errflag
51 #endif /* yyerrflag */
52
53 #ifndef yylhs
54 #define yylhs calc3_lhs
55 #endif /* yylhs */
56
57 #ifndef yylen
58 #define yylen calc3_len
59 #endif /* yylen */
60
61 #ifndef yydefred
62 #define yydefred calc3_defred
63 #endif /* yydefred */
64
65 #ifndef yydgoto
66 #define yydgoto calc3_dgoto
67 #endif /* yydgoto */
68
69 #ifndef yysindex
70 #define yysindex calc3_sindex
71 #endif /* yysindex */
72
73 #ifndef yyrindex
74 #define yyrindex calc3_rindex
75 #endif /* yyrindex */
76
77 #ifndef yygindex
78 #define yygindex calc3_gindex
79 #endif /* yygindex */
80
81 #ifndef yytable
82 #define yytable calc3_table
83 #endif /* yytable */
84
85 #ifndef yycheck
86 #define yycheck calc3_check
87 #endif /* yycheck */
88
89 #ifndef yyname
90 #define yyname calc3_name
91 #endif /* yyname */
92
93 #ifndef yyrule
94 #define yyrule calc3_rule
95 #endif /* yyrule */
96 #define YYPREFIX "calc3_"
97
98 #define YYPURE 1
99
100 #line 9 "calc3.y"
101 # include <stdio.h>
102 # include <ctype.h>
103
104 #ifdef YYBISON
105 #define YYSTYPE int
106 #define YYLEX_PARAM base
107 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
108 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
109 int YYLEX_DECL();
110 static void YYERROR_DECL();
111 #endif
112
113 #line 114 "calc3.tab.c"
114
115 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
116 /* Default: YYSTYPE is the semantic value type. */
117 typedef int YYSTYPE;
118 # define YYSTYPE_IS_DECLARED 1
119 #endif
120
121 /* compatibility with bison */
122 #ifdef YYPARSE_PARAM
123 /* compatibility with FreeBSD */
124 # ifdef YYPARSE_PARAM_TYPE
125 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
126 # else
127 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
128 # endif
129 #else
130 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
131 #endif
132
133 /* Parameters sent to lex. */
134 #ifdef YYLEX_PARAM
135 # ifdef YYLEX_PARAM_TYPE
136 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
137 # else
138 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
139 # endif
140 # define YYLEX yylex(&yylval, YYLEX_PARAM)
141 #else
142 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
143 # define YYLEX yylex(&yylval, base)
144 #endif
145
146 /* Parameters sent to yyerror. */
147 #ifndef YYERROR_DECL
148 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
149 #endif
150 #ifndef YYERROR_CALL
151 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
152 #endif
153
154 extern int YYPARSE_DECL();
155
156 #define DIGIT 257
157 #define LETTER 258
158 #define UMINUS 259
159 #define YYERRCODE 256
160 typedef int YYINT;
161 static const YYINT calc3_lhs[] = { -1,
162 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
163 2, 2, 2, 2, 2, 2, 3, 3,
164 };
165 static const YYINT calc3_len[] = { 2,
166 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
167 3, 3, 3, 2, 1, 1, 1, 2,
168 };
169 static const YYINT calc3_defred[] = { 1,
170 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
171 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
172 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
173 10, 11,
174 };
175 static const YYINT calc3_dgoto[] = { 1,
176 7, 8, 9,
177 };
178 static const YYINT calc3_sindex[] = { 0,
179 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
180 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
181 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
182 0, 0,
183 };
184 static const YYINT calc3_rindex[] = { 0,
185 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
186 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
187 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
188 0, 0,
189 };
190 static const YYINT calc3_gindex[] = { 0,
191 0, 65, 0,
192 };
193 #define YYTABLESIZE 220
194 static const YYINT calc3_table[] = { 6,
195 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
196 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
197 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
198 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
199 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
200 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
201 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
202 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
203 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
204 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
205 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
206 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
207 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
208 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
209 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
211 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
214 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
216 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
217 };
218 static const YYINT calc3_check[] = { 40,
219 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
220 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
221 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
222 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
223 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
224 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
225 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
226 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
227 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
228 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
229 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
230 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
231 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
232 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
233 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
238 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
239 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
240 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
241 };
242 #define YYFINAL 1
243 #ifndef YYDEBUG
244 #define YYDEBUG 0
245 #endif
246 #define YYMAXTOKEN 259
247 #define YYUNDFTOKEN 265
248 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
249 #if YYDEBUG
250 static const char *const calc3_name[] = {
251
252 "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
253 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
254 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
255 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
256 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
257 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
258 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
259 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
260 };
261 static const char *const calc3_rule[] = {
262 "$accept : list",
263 "list :",
264 "list : list stat '\\n'",
265 "list : list error '\\n'",
266 "stat : expr",
267 "stat : LETTER '=' expr",
268 "expr : '(' expr ')'",
269 "expr : expr '+' expr",
270 "expr : expr '-' expr",
271 "expr : expr '*' expr",
272 "expr : expr '/' expr",
273 "expr : expr '%' expr",
274 "expr : expr '&' expr",
275 "expr : expr '|' expr",
276 "expr : '-' expr",
277 "expr : LETTER",
278 "expr : number",
279 "number : DIGIT",
280 "number : number DIGIT",
281
282 };
283 #endif
284
285 #if YYDEBUG
286 int yydebug;
287 #endif
288
289 /* define the initial stack-sizes */
290 #ifdef YYSTACKSIZE
291 #undef YYMAXDEPTH
292 #define YYMAXDEPTH YYSTACKSIZE
293 #else
294 #ifdef YYMAXDEPTH
295 #define YYSTACKSIZE YYMAXDEPTH
296 #else
297 #define YYSTACKSIZE 10000
298 #define YYMAXDEPTH 10000
299 #endif
300 #endif
301
302 #define YYINITSTACKSIZE 200
303
304 typedef struct {
305 unsigned stacksize;
306 YYINT *s_base;
307 YYINT *s_mark;
308 YYINT *s_last;
309 YYSTYPE *l_base;
310 YYSTYPE *l_mark;
311 } YYSTACKDATA;
312 #line 76 "calc3.y"
313 /* start of programs */
314
315 #ifdef YYBYACC
316 extern int YYLEX_DECL();
317 #endif
318
319 int
main(void)320 main (void)
321 {
322 int regs[26];
323 int base = 10;
324
325 while(!feof(stdin)) {
326 yyparse(regs, &base);
327 }
328 return 0;
329 }
330
331 #define UNUSED(x) ((void)(x))
332
333 static void
YYERROR_DECL()334 YYERROR_DECL()
335 {
336 UNUSED(regs); /* %parse-param regs is not actually used here */
337 UNUSED(base); /* %parse-param base is not actually used here */
338 fprintf(stderr, "%s\n", s);
339 }
340
341 int
YYLEX_DECL()342 YYLEX_DECL()
343 {
344 /* lexical analysis routine */
345 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
346 /* return DIGIT for a digit, yylval = 0 through 9 */
347 /* all other characters are returned immediately */
348
349 int c;
350
351 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
352
353 /* c is now nonblank */
354
355 if( islower( c )) {
356 *yylval = (c - 'a');
357 return ( LETTER );
358 }
359 if( isdigit( c )) {
360 *yylval = (c - '0') % (*base);
361 return ( DIGIT );
362 }
363 return( c );
364 }
365 #line 366 "calc3.tab.c"
366
367 #if YYDEBUG
368 #include <stdio.h> /* needed for printf */
369 #endif
370
371 #include <stdlib.h> /* needed for malloc, etc */
372 #include <string.h> /* needed for memset */
373
374 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
yygrowstack(YYSTACKDATA * data)375 static int yygrowstack(YYSTACKDATA *data)
376 {
377 int i;
378 unsigned newsize;
379 YYINT *newss;
380 YYSTYPE *newvs;
381
382 if ((newsize = data->stacksize) == 0)
383 newsize = YYINITSTACKSIZE;
384 else if (newsize >= YYMAXDEPTH)
385 return YYENOMEM;
386 else if ((newsize *= 2) > YYMAXDEPTH)
387 newsize = YYMAXDEPTH;
388
389 i = (int) (data->s_mark - data->s_base);
390 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
391 if (newss == NULL)
392 return YYENOMEM;
393
394 data->s_base = newss;
395 data->s_mark = newss + i;
396
397 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
398 if (newvs == NULL)
399 return YYENOMEM;
400
401 data->l_base = newvs;
402 data->l_mark = newvs + i;
403
404 data->stacksize = newsize;
405 data->s_last = data->s_base + newsize - 1;
406 return 0;
407 }
408
409 #if YYPURE || defined(YY_NO_LEAKS)
yyfreestack(YYSTACKDATA * data)410 static void yyfreestack(YYSTACKDATA *data)
411 {
412 free(data->s_base);
413 free(data->l_base);
414 memset(data, 0, sizeof(*data));
415 }
416 #else
417 #define yyfreestack(data) /* nothing */
418 #endif
419
420 #define YYABORT goto yyabort
421 #define YYREJECT goto yyabort
422 #define YYACCEPT goto yyaccept
423 #define YYERROR goto yyerrlab
424
425 int
YYPARSE_DECL()426 YYPARSE_DECL()
427 {
428 int yyerrflag;
429 int yychar;
430 YYSTYPE yyval;
431 YYSTYPE yylval;
432 int yynerrs;
433
434 /* variables for the parser stack */
435 YYSTACKDATA yystack;
436 int yym, yyn, yystate;
437 #if YYDEBUG
438 const char *yys;
439
440 if ((yys = getenv("YYDEBUG")) != NULL)
441 {
442 yyn = *yys;
443 if (yyn >= '0' && yyn <= '9')
444 yydebug = yyn - '0';
445 }
446 #endif
447
448 memset(&yyval, 0, sizeof(yyval));
449 memset(&yylval, 0, sizeof(yylval));
450
451 /* yym is set below */
452 /* yyn is set below */
453 yynerrs = 0;
454 yyerrflag = 0;
455 yychar = YYEMPTY;
456 yystate = 0;
457
458 #if YYPURE
459 memset(&yystack, 0, sizeof(yystack));
460 #endif
461
462 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
463 yystack.s_mark = yystack.s_base;
464 yystack.l_mark = yystack.l_base;
465 yystate = 0;
466 *yystack.s_mark = 0;
467
468 yyloop:
469 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
470 if (yychar < 0)
471 {
472 yychar = YYLEX;
473 if (yychar < 0) yychar = YYEOF;
474 #if YYDEBUG
475 if (yydebug)
476 {
477 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
478 printf("%sdebug: state %d, reading %d (%s)\n",
479 YYPREFIX, yystate, yychar, yys);
480 }
481 #endif
482 }
483 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
484 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
485 {
486 #if YYDEBUG
487 if (yydebug)
488 printf("%sdebug: state %d, shifting to state %d\n",
489 YYPREFIX, yystate, yytable[yyn]);
490 #endif
491 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
492 yystate = yytable[yyn];
493 *++yystack.s_mark = yytable[yyn];
494 *++yystack.l_mark = yylval;
495 yychar = YYEMPTY;
496 if (yyerrflag > 0) --yyerrflag;
497 goto yyloop;
498 }
499 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
500 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
501 {
502 yyn = yytable[yyn];
503 goto yyreduce;
504 }
505 if (yyerrflag != 0) goto yyinrecovery;
506
507 YYERROR_CALL("syntax error");
508
509 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
510 yyerrlab:
511 ++yynerrs;
512
513 yyinrecovery:
514 if (yyerrflag < 3)
515 {
516 yyerrflag = 3;
517 for (;;)
518 {
519 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
520 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
521 {
522 #if YYDEBUG
523 if (yydebug)
524 printf("%sdebug: state %d, error recovery shifting\
525 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
526 #endif
527 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
528 yystate = yytable[yyn];
529 *++yystack.s_mark = yytable[yyn];
530 *++yystack.l_mark = yylval;
531 goto yyloop;
532 }
533 else
534 {
535 #if YYDEBUG
536 if (yydebug)
537 printf("%sdebug: error recovery discarding state %d\n",
538 YYPREFIX, *yystack.s_mark);
539 #endif
540 if (yystack.s_mark <= yystack.s_base) goto yyabort;
541 --yystack.s_mark;
542 --yystack.l_mark;
543 }
544 }
545 }
546 else
547 {
548 if (yychar == YYEOF) goto yyabort;
549 #if YYDEBUG
550 if (yydebug)
551 {
552 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
553 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
554 YYPREFIX, yystate, yychar, yys);
555 }
556 #endif
557 yychar = YYEMPTY;
558 goto yyloop;
559 }
560
561 yyreduce:
562 #if YYDEBUG
563 if (yydebug)
564 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
565 YYPREFIX, yystate, yyn, yyrule[yyn]);
566 #endif
567 yym = yylen[yyn];
568 if (yym > 0)
569 yyval = yystack.l_mark[1-yym];
570 else
571 memset(&yyval, 0, sizeof yyval);
572
573 switch (yyn)
574 {
575 case 3:
576 #line 38 "calc3.y"
577 { yyerrok ; }
578 #line 579 "calc3.tab.c"
579 break;
580 case 4:
581 #line 42 "calc3.y"
582 { printf("%d\n",yystack.l_mark[0]);}
583 #line 584 "calc3.tab.c"
584 break;
585 case 5:
586 #line 44 "calc3.y"
587 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
588 #line 589 "calc3.tab.c"
589 break;
590 case 6:
591 #line 48 "calc3.y"
592 { yyval = yystack.l_mark[-1]; }
593 #line 594 "calc3.tab.c"
594 break;
595 case 7:
596 #line 50 "calc3.y"
597 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
598 #line 599 "calc3.tab.c"
599 break;
600 case 8:
601 #line 52 "calc3.y"
602 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
603 #line 604 "calc3.tab.c"
604 break;
605 case 9:
606 #line 54 "calc3.y"
607 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
608 #line 609 "calc3.tab.c"
609 break;
610 case 10:
611 #line 56 "calc3.y"
612 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
613 #line 614 "calc3.tab.c"
614 break;
615 case 11:
616 #line 58 "calc3.y"
617 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
618 #line 619 "calc3.tab.c"
619 break;
620 case 12:
621 #line 60 "calc3.y"
622 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
623 #line 624 "calc3.tab.c"
624 break;
625 case 13:
626 #line 62 "calc3.y"
627 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
628 #line 629 "calc3.tab.c"
629 break;
630 case 14:
631 #line 64 "calc3.y"
632 { yyval = - yystack.l_mark[0]; }
633 #line 634 "calc3.tab.c"
634 break;
635 case 15:
636 #line 66 "calc3.y"
637 { yyval = regs[yystack.l_mark[0]]; }
638 #line 639 "calc3.tab.c"
639 break;
640 case 17:
641 #line 71 "calc3.y"
642 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
643 #line 644 "calc3.tab.c"
644 break;
645 case 18:
646 #line 73 "calc3.y"
647 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
648 #line 649 "calc3.tab.c"
649 break;
650 #line 651 "calc3.tab.c"
651 }
652 yystack.s_mark -= yym;
653 yystate = *yystack.s_mark;
654 yystack.l_mark -= yym;
655 yym = yylhs[yyn];
656 if (yystate == 0 && yym == 0)
657 {
658 #if YYDEBUG
659 if (yydebug)
660 printf("%sdebug: after reduction, shifting from state 0 to\
661 state %d\n", YYPREFIX, YYFINAL);
662 #endif
663 yystate = YYFINAL;
664 *++yystack.s_mark = YYFINAL;
665 *++yystack.l_mark = yyval;
666 if (yychar < 0)
667 {
668 yychar = YYLEX;
669 if (yychar < 0) yychar = YYEOF;
670 #if YYDEBUG
671 if (yydebug)
672 {
673 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
674 printf("%sdebug: state %d, reading %d (%s)\n",
675 YYPREFIX, YYFINAL, yychar, yys);
676 }
677 #endif
678 }
679 if (yychar == YYEOF) goto yyaccept;
680 goto yyloop;
681 }
682 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
683 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
684 yystate = yytable[yyn];
685 else
686 yystate = yydgoto[yym];
687 #if YYDEBUG
688 if (yydebug)
689 printf("%sdebug: after reduction, shifting from state %d \
690 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
691 #endif
692 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
693 *++yystack.s_mark = (YYINT) yystate;
694 *++yystack.l_mark = yyval;
695 goto yyloop;
696
697 yyoverflow:
698 YYERROR_CALL("yacc stack overflow");
699
700 yyabort:
701 yyfreestack(&yystack);
702 return (1);
703
704 yyaccept:
705 yyfreestack(&yystack);
706 return (0);
707 }
708