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