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