xref: /freebsd/contrib/byacc/test/yacc/calc2.tab.c (revision 59e2ff550c448126b988150ce800cdf73bb5103e)
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 #ifndef yyparse
18 #define yyparse    calc2_parse
19 #endif /* yyparse */
20 
21 #ifndef yylex
22 #define yylex      calc2_lex
23 #endif /* yylex */
24 
25 #ifndef yyerror
26 #define yyerror    calc2_error
27 #endif /* yyerror */
28 
29 #ifndef yychar
30 #define yychar     calc2_char
31 #endif /* yychar */
32 
33 #ifndef yyval
34 #define yyval      calc2_val
35 #endif /* yyval */
36 
37 #ifndef yylval
38 #define yylval     calc2_lval
39 #endif /* yylval */
40 
41 #ifndef yydebug
42 #define yydebug    calc2_debug
43 #endif /* yydebug */
44 
45 #ifndef yynerrs
46 #define yynerrs    calc2_nerrs
47 #endif /* yynerrs */
48 
49 #ifndef yyerrflag
50 #define yyerrflag  calc2_errflag
51 #endif /* yyerrflag */
52 
53 #ifndef yylhs
54 #define yylhs      calc2_lhs
55 #endif /* yylhs */
56 
57 #ifndef yylen
58 #define yylen      calc2_len
59 #endif /* yylen */
60 
61 #ifndef yydefred
62 #define yydefred   calc2_defred
63 #endif /* yydefred */
64 
65 #ifndef yydgoto
66 #define yydgoto    calc2_dgoto
67 #endif /* yydgoto */
68 
69 #ifndef yysindex
70 #define yysindex   calc2_sindex
71 #endif /* yysindex */
72 
73 #ifndef yyrindex
74 #define yyrindex   calc2_rindex
75 #endif /* yyrindex */
76 
77 #ifndef yygindex
78 #define yygindex   calc2_gindex
79 #endif /* yygindex */
80 
81 #ifndef yytable
82 #define yytable    calc2_table
83 #endif /* yytable */
84 
85 #ifndef yycheck
86 #define yycheck    calc2_check
87 #endif /* yycheck */
88 
89 #ifndef yyname
90 #define yyname     calc2_name
91 #endif /* yyname */
92 
93 #ifndef yyrule
94 #define yyrule     calc2_rule
95 #endif /* yyrule */
96 #define YYPREFIX "calc2_"
97 
98 #define YYPURE 0
99 
100 #line 7 "calc2.y"
101 # include <stdio.h>
102 # include <ctype.h>
103 
104 #ifdef YYBISON
105 #define YYLEX_PARAM base
106 #define YYLEX_DECL() yylex(int *YYLEX_PARAM)
107 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
108 int YYLEX_DECL();
109 static void YYERROR_DECL();
110 #endif
111 
112 #line 113 "calc2.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(int regs[26], int *base)
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(int *base)
138 # define YYLEX yylex(base)
139 #endif
140 
141 /* Parameters sent to yyerror. */
142 #ifndef YYERROR_DECL
143 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
144 #endif
145 #ifndef YYERROR_CALL
146 #define YYERROR_CALL(msg) yyerror(regs, base, 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 calc2_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 calc2_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 calc2_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 calc2_dgoto[] = {                      1,
171     7,    8,    9,
172 };
173 static const YYINT calc2_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 calc2_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 calc2_gindex[] = {                     0,
186     0,   65,    0,
187 };
188 #define YYTABLESIZE 220
189 static const YYINT calc2_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 calc2_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 calc2_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 calc2_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 int      yydebug;
281 int      yynerrs;
282 
283 int      yyerrflag;
284 int      yychar;
285 YYSTYPE  yyval;
286 YYSTYPE  yylval;
287 
288 /* define the initial stack-sizes */
289 #ifdef YYSTACKSIZE
290 #undef YYMAXDEPTH
291 #define YYMAXDEPTH  YYSTACKSIZE
292 #else
293 #ifdef YYMAXDEPTH
294 #define YYSTACKSIZE YYMAXDEPTH
295 #else
296 #define YYSTACKSIZE 10000
297 #define YYMAXDEPTH  10000
298 #endif
299 #endif
300 
301 #define YYINITSTACKSIZE 200
302 
303 typedef struct {
304     unsigned stacksize;
305     YYINT    *s_base;
306     YYINT    *s_mark;
307     YYINT    *s_last;
308     YYSTYPE  *l_base;
309     YYSTYPE  *l_mark;
310 } YYSTACKDATA;
311 /* variables for the parser stack */
312 static YYSTACKDATA yystack;
313 #line 73 "calc2.y"
314  /* start of programs */
315 
316 #ifdef YYBYACC
317 extern int YYLEX_DECL();
318 #endif
319 
320 int
321 main (void)
322 {
323     int regs[26];
324     int base = 10;
325 
326     while(!feof(stdin)) {
327 	yyparse(regs, &base);
328     }
329     return 0;
330 }
331 
332 #define UNUSED(x) ((void)(x))
333 
334 static void
335 YYERROR_DECL()
336 {
337     UNUSED(regs); /* %parse-param regs is not actually used here */
338     UNUSED(base); /* %parse-param base is not actually used here */
339     fprintf(stderr, "%s\n", s);
340 }
341 
342 int
343 YYLEX_DECL()
344 {
345 	/* lexical analysis routine */
346 	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
347 	/* return DIGIT for a digit, yylval = 0 through 9 */
348 	/* all other characters are returned immediately */
349 
350     int c;
351 
352     while( (c=getchar()) == ' ' )   { /* skip blanks */ }
353 
354     /* c is now nonblank */
355 
356     if( islower( c )) {
357 	yylval = c - 'a';
358 	return ( LETTER );
359     }
360     if( isdigit( c )) {
361 	yylval = (c - '0') % (*base);
362 	return ( DIGIT );
363     }
364     return( c );
365 }
366 #line 367 "calc2.tab.c"
367 
368 #if YYDEBUG
369 #include <stdio.h>		/* needed for printf */
370 #endif
371 
372 #include <stdlib.h>	/* needed for malloc, etc */
373 #include <string.h>	/* needed for memset */
374 
375 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
376 static int yygrowstack(YYSTACKDATA *data)
377 {
378     int i;
379     unsigned newsize;
380     YYINT *newss;
381     YYSTYPE *newvs;
382 
383     if ((newsize = data->stacksize) == 0)
384         newsize = YYINITSTACKSIZE;
385     else if (newsize >= YYMAXDEPTH)
386         return YYENOMEM;
387     else if ((newsize *= 2) > YYMAXDEPTH)
388         newsize = YYMAXDEPTH;
389 
390     i = (int) (data->s_mark - data->s_base);
391     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
392     if (newss == 0)
393         return YYENOMEM;
394 
395     data->s_base = newss;
396     data->s_mark = newss + i;
397 
398     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
399     if (newvs == 0)
400         return YYENOMEM;
401 
402     data->l_base = newvs;
403     data->l_mark = newvs + i;
404 
405     data->stacksize = newsize;
406     data->s_last = data->s_base + newsize - 1;
407     return 0;
408 }
409 
410 #if YYPURE || defined(YY_NO_LEAKS)
411 static void yyfreestack(YYSTACKDATA *data)
412 {
413     free(data->s_base);
414     free(data->l_base);
415     memset(data, 0, sizeof(*data));
416 }
417 #else
418 #define yyfreestack(data) /* nothing */
419 #endif
420 
421 #define YYABORT  goto yyabort
422 #define YYREJECT goto yyabort
423 #define YYACCEPT goto yyaccept
424 #define YYERROR  goto yyerrlab
425 
426 int
427 YYPARSE_DECL()
428 {
429     int yym, yyn, yystate;
430 #if YYDEBUG
431     const char *yys;
432 
433     if ((yys = getenv("YYDEBUG")) != 0)
434     {
435         yyn = *yys;
436         if (yyn >= '0' && yyn <= '9')
437             yydebug = yyn - '0';
438     }
439 #endif
440 
441     yynerrs = 0;
442     yyerrflag = 0;
443     yychar = YYEMPTY;
444     yystate = 0;
445 
446 #if YYPURE
447     memset(&yystack, 0, sizeof(yystack));
448 #endif
449 
450     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
451     yystack.s_mark = yystack.s_base;
452     yystack.l_mark = yystack.l_base;
453     yystate = 0;
454     *yystack.s_mark = 0;
455 
456 yyloop:
457     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
458     if (yychar < 0)
459     {
460         if ((yychar = YYLEX) < 0) yychar = YYEOF;
461 #if YYDEBUG
462         if (yydebug)
463         {
464             yys = yyname[YYTRANSLATE(yychar)];
465             printf("%sdebug: state %d, reading %d (%s)\n",
466                     YYPREFIX, yystate, yychar, yys);
467         }
468 #endif
469     }
470     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
471             yyn <= YYTABLESIZE && yycheck[yyn] == 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)
479         {
480             goto yyoverflow;
481         }
482         yystate = yytable[yyn];
483         *++yystack.s_mark = yytable[yyn];
484         *++yystack.l_mark = yylval;
485         yychar = YYEMPTY;
486         if (yyerrflag > 0)  --yyerrflag;
487         goto yyloop;
488     }
489     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
490             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
491     {
492         yyn = yytable[yyn];
493         goto yyreduce;
494     }
495     if (yyerrflag) goto yyinrecovery;
496 
497     YYERROR_CALL("syntax error");
498 
499     goto yyerrlab;
500 
501 yyerrlab:
502     ++yynerrs;
503 
504 yyinrecovery:
505     if (yyerrflag < 3)
506     {
507         yyerrflag = 3;
508         for (;;)
509         {
510             if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
511                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
512             {
513 #if YYDEBUG
514                 if (yydebug)
515                     printf("%sdebug: state %d, error recovery shifting\
516  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
517 #endif
518                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
519                 {
520                     goto yyoverflow;
521                 }
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             yys = yyname[YYTRANSLATE(yychar)];
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)
563         yyval = yystack.l_mark[1-yym];
564     else
565         memset(&yyval, 0, sizeof yyval);
566     switch (yyn)
567     {
568 case 3:
569 #line 35 "calc2.y"
570 	{  yyerrok ; }
571 break;
572 case 4:
573 #line 39 "calc2.y"
574 	{  printf("%d\n",yystack.l_mark[0]);}
575 break;
576 case 5:
577 #line 41 "calc2.y"
578 	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
579 break;
580 case 6:
581 #line 45 "calc2.y"
582 	{  yyval = yystack.l_mark[-1]; }
583 break;
584 case 7:
585 #line 47 "calc2.y"
586 	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
587 break;
588 case 8:
589 #line 49 "calc2.y"
590 	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
591 break;
592 case 9:
593 #line 51 "calc2.y"
594 	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
595 break;
596 case 10:
597 #line 53 "calc2.y"
598 	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
599 break;
600 case 11:
601 #line 55 "calc2.y"
602 	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
603 break;
604 case 12:
605 #line 57 "calc2.y"
606 	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
607 break;
608 case 13:
609 #line 59 "calc2.y"
610 	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
611 break;
612 case 14:
613 #line 61 "calc2.y"
614 	{  yyval = - yystack.l_mark[0]; }
615 break;
616 case 15:
617 #line 63 "calc2.y"
618 	{  yyval = regs[yystack.l_mark[0]]; }
619 break;
620 case 17:
621 #line 68 "calc2.y"
622 	{  yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
623 break;
624 case 18:
625 #line 70 "calc2.y"
626 	{  yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
627 break;
628 #line 629 "calc2.tab.c"
629     }
630     yystack.s_mark -= yym;
631     yystate = *yystack.s_mark;
632     yystack.l_mark -= yym;
633     yym = yylhs[yyn];
634     if (yystate == 0 && yym == 0)
635     {
636 #if YYDEBUG
637         if (yydebug)
638             printf("%sdebug: after reduction, shifting from state 0 to\
639  state %d\n", YYPREFIX, YYFINAL);
640 #endif
641         yystate = YYFINAL;
642         *++yystack.s_mark = YYFINAL;
643         *++yystack.l_mark = yyval;
644         if (yychar < 0)
645         {
646             if ((yychar = YYLEX) < 0) yychar = YYEOF;
647 #if YYDEBUG
648             if (yydebug)
649             {
650                 yys = yyname[YYTRANSLATE(yychar)];
651                 printf("%sdebug: state %d, reading %d (%s)\n",
652                         YYPREFIX, YYFINAL, yychar, yys);
653             }
654 #endif
655         }
656         if (yychar == YYEOF) goto yyaccept;
657         goto yyloop;
658     }
659     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
660             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
661         yystate = yytable[yyn];
662     else
663         yystate = yydgoto[yym];
664 #if YYDEBUG
665     if (yydebug)
666         printf("%sdebug: after reduction, shifting from state %d \
667 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
668 #endif
669     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
670     {
671         goto yyoverflow;
672     }
673     *++yystack.s_mark = (YYINT) yystate;
674     *++yystack.l_mark = yyval;
675     goto yyloop;
676 
677 yyoverflow:
678     YYERROR_CALL("yacc stack overflow");
679 
680 yyabort:
681     yyfreestack(&yystack);
682     return (1);
683 
684 yyaccept:
685     yyfreestack(&yystack);
686     return (0);
687 }
688