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