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