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_calc_parse
17#endif /* yyparse */
18
19#ifndef yylex
20#define yylex      quote_calc_lex
21#endif /* yylex */
22
23#ifndef yyerror
24#define yyerror    quote_calc_error
25#endif /* yyerror */
26
27#ifndef yychar
28#define yychar     quote_calc_char
29#endif /* yychar */
30
31#ifndef yyval
32#define yyval      quote_calc_val
33#endif /* yyval */
34
35#ifndef yylval
36#define yylval     quote_calc_lval
37#endif /* yylval */
38
39#ifndef yydebug
40#define yydebug    quote_calc_debug
41#endif /* yydebug */
42
43#ifndef yynerrs
44#define yynerrs    quote_calc_nerrs
45#endif /* yynerrs */
46
47#ifndef yyerrflag
48#define yyerrflag  quote_calc_errflag
49#endif /* yyerrflag */
50
51#ifndef yylhs
52#define yylhs      quote_calc_lhs
53#endif /* yylhs */
54
55#ifndef yylen
56#define yylen      quote_calc_len
57#endif /* yylen */
58
59#ifndef yydefred
60#define yydefred   quote_calc_defred
61#endif /* yydefred */
62
63#ifndef yydgoto
64#define yydgoto    quote_calc_dgoto
65#endif /* yydgoto */
66
67#ifndef yysindex
68#define yysindex   quote_calc_sindex
69#endif /* yysindex */
70
71#ifndef yyrindex
72#define yyrindex   quote_calc_rindex
73#endif /* yyrindex */
74
75#ifndef yygindex
76#define yygindex   quote_calc_gindex
77#endif /* yygindex */
78
79#ifndef yytable
80#define yytable    quote_calc_table
81#endif /* yytable */
82
83#ifndef yycheck
84#define yycheck    quote_calc_check
85#endif /* yycheck */
86
87#ifndef yyname
88#define yyname     quote_calc_name
89#endif /* yyname */
90
91#ifndef yyrule
92#define yyrule     quote_calc_rule
93#endif /* yyrule */
94#define YYPREFIX "quote_calc_"
95
96#define YYPURE 0
97
98#line 2 "quote_calc.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_calc-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_calc_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_calc_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_calc_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_calc_dgoto[] = {                 1,
170    7,    8,    9,
171};
172static const short quote_calc_sindex[] = {                0,
173  -38,    5,  -36,    0,  -51,  -36,    7, -121, -248,    0,
174    0, -243,  -36,  -22,    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_calc_rindex[] = {                0,
179    0,    0,    0,    0,   -9,    0,    0,   13,  -10,    0,
180    0,   -5,    0,    0,    0,    0,    0,    0,    0,    0,
181    0,    0,    0,   15,    0,   -3,   -2,   -1,    1,    2,
182    3,   -4,
183};
184static const short quote_calc_gindex[] = {                0,
185    0,   42,    0,
186};
187#define YYTABLESIZE 258
188static const short quote_calc_table[] = {                16,
189   15,    6,   22,    6,   14,   13,    7,    8,    9,   13,
190   10,   11,   12,   16,   10,   17,   15,   18,   25,   19,
191   23,   20,    4,   21,    5,    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    0,   22,    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,   16,    0,   17,    0,   18,
203    0,   19,    0,   20,    0,   21,    0,    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    3,    0,    3,    0,    0,    0,    0,    0,    0,    0,
212    4,    5,    4,   11,   16,    0,   17,    0,   18,    0,
213   19,    0,   20,    0,   21,    0,   16,   15,   16,   15,
214   16,   15,   16,   15,   16,   15,   16,   15,
215};
216static const short quote_calc_check[] = {                10,
217   10,   40,  124,   40,   10,   10,   10,   10,   10,   61,
218   10,   10,   10,  257,   10,  259,   10,  261,   41,  263,
219  269,  265,   10,  267,   10,   -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   -1,  124,   -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,  257,   -1,  259,   -1,  261,
231   -1,  263,   -1,  265,   -1,  267,   -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,   -1,   -1,   -1,   -1,   -1,
238   -1,   -1,   -1,   -1,   -1,   -1,   -1,  256,   -1,   -1,
239  259,   -1,  259,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
240  269,  270,  269,  270,  257,   -1,  259,   -1,  261,   -1,
241  263,   -1,  265,   -1,  267,   -1,  257,  257,  259,  259,
242  261,  261,  263,  263,  265,  265,  267,  267,
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\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
260"\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",
261};
262static const char *yyrule[] = {
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 OP_ADD expr",
271"expr : expr OP_SUB expr",
272"expr : expr OP_MUL expr",
273"expr : expr OP_DIV expr",
274"expr : expr OP_MOD expr",
275"expr : expr OP_AND expr",
276"expr : expr '|' expr",
277"expr : OP_SUB expr",
278"expr : LETTER",
279"expr : number",
280"number : DIGIT",
281"number : number DIGIT",
282
283};
284#endif
285
286int      yydebug;
287int      yynerrs;
288
289int      yyerrflag;
290int      yychar;
291YYSTYPE  yyval;
292YYSTYPE  yylval;
293
294/* define the initial stack-sizes */
295#ifdef YYSTACKSIZE
296#undef YYMAXDEPTH
297#define YYMAXDEPTH  YYSTACKSIZE
298#else
299#ifdef YYMAXDEPTH
300#define YYSTACKSIZE YYMAXDEPTH
301#else
302#define YYSTACKSIZE 500
303#define YYMAXDEPTH  500
304#endif
305#endif
306
307#define YYINITSTACKSIZE 500
308
309typedef struct {
310    unsigned stacksize;
311    short    *s_base;
312    short    *s_mark;
313    short    *s_last;
314    YYSTYPE  *l_base;
315    YYSTYPE  *l_mark;
316} YYSTACKDATA;
317/* variables for the parser stack */
318static YYSTACKDATA yystack;
319#line 73 "quote_calc.y"
320 /* start of programs */
321
322int
323main (void)
324{
325    while(!feof(stdin)) {
326	yyparse();
327    }
328    return 0;
329}
330
331static void
332yyerror(const char *s)
333{
334    fprintf(stderr, "%s\n", s);
335}
336
337int
338yylex(void) {
339	/* lexical analysis routine */
340	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
341	/* return DIGIT for a digit, yylval = 0 through 9 */
342	/* all other characters are returned immediately */
343
344    int c;
345
346    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
347
348    /* c is now nonblank */
349
350    if( islower( c )) {
351	yylval = c - 'a';
352	return ( LETTER );
353    }
354    if( isdigit( c )) {
355	yylval = c - '0';
356	return ( DIGIT );
357    }
358    return( c );
359}
360#line 361 "quote_calc-s.tab.c"
361
362#if YYDEBUG
363#include <stdio.h>		/* needed for printf */
364#endif
365
366#include <stdlib.h>	/* needed for malloc, etc */
367#include <string.h>	/* needed for memset */
368
369/* allocate initial stack or double stack size, up to YYMAXDEPTH */
370static int yygrowstack(YYSTACKDATA *data)
371{
372    int i;
373    unsigned newsize;
374    short *newss;
375    YYSTYPE *newvs;
376
377    if ((newsize = data->stacksize) == 0)
378        newsize = YYINITSTACKSIZE;
379    else if (newsize >= YYMAXDEPTH)
380        return -1;
381    else if ((newsize *= 2) > YYMAXDEPTH)
382        newsize = YYMAXDEPTH;
383
384    i = (int) (data->s_mark - data->s_base);
385    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
386    if (newss == 0)
387        return -1;
388
389    data->s_base = newss;
390    data->s_mark = newss + i;
391
392    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
393    if (newvs == 0)
394        return -1;
395
396    data->l_base = newvs;
397    data->l_mark = newvs + i;
398
399    data->stacksize = newsize;
400    data->s_last = data->s_base + newsize - 1;
401    return 0;
402}
403
404#if YYPURE || defined(YY_NO_LEAKS)
405static void yyfreestack(YYSTACKDATA *data)
406{
407    free(data->s_base);
408    free(data->l_base);
409    memset(data, 0, sizeof(*data));
410}
411#else
412#define yyfreestack(data) /* nothing */
413#endif
414
415#define YYABORT  goto yyabort
416#define YYREJECT goto yyabort
417#define YYACCEPT goto yyaccept
418#define YYERROR  goto yyerrlab
419
420int
421YYPARSE_DECL()
422{
423    int yym, yyn, yystate;
424#if YYDEBUG
425    const char *yys;
426
427    if ((yys = getenv("YYDEBUG")) != 0)
428    {
429        yyn = *yys;
430        if (yyn >= '0' && yyn <= '9')
431            yydebug = yyn - '0';
432    }
433#endif
434
435    yynerrs = 0;
436    yyerrflag = 0;
437    yychar = YYEMPTY;
438    yystate = 0;
439
440#if YYPURE
441    memset(&yystack, 0, sizeof(yystack));
442#endif
443
444    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
445    yystack.s_mark = yystack.s_base;
446    yystack.l_mark = yystack.l_base;
447    yystate = 0;
448    *yystack.s_mark = 0;
449
450yyloop:
451    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
452    if (yychar < 0)
453    {
454        if ((yychar = YYLEX) < 0) yychar = 0;
455#if YYDEBUG
456        if (yydebug)
457        {
458            yys = 0;
459            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
460            if (!yys) yys = "illegal-symbol";
461            printf("%sdebug: state %d, reading %d (%s)\n",
462                    YYPREFIX, yystate, yychar, yys);
463        }
464#endif
465    }
466    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
467            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
468    {
469#if YYDEBUG
470        if (yydebug)
471            printf("%sdebug: state %d, shifting to state %d\n",
472                    YYPREFIX, yystate, yytable[yyn]);
473#endif
474        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
475        {
476            goto yyoverflow;
477        }
478        yystate = yytable[yyn];
479        *++yystack.s_mark = yytable[yyn];
480        *++yystack.l_mark = yylval;
481        yychar = YYEMPTY;
482        if (yyerrflag > 0)  --yyerrflag;
483        goto yyloop;
484    }
485    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
486            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
487    {
488        yyn = yytable[yyn];
489        goto yyreduce;
490    }
491    if (yyerrflag) goto yyinrecovery;
492
493    yyerror("syntax error");
494
495    goto yyerrlab;
496
497yyerrlab:
498    ++yynerrs;
499
500yyinrecovery:
501    if (yyerrflag < 3)
502    {
503        yyerrflag = 3;
504        for (;;)
505        {
506            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
507                    yyn <= YYTABLESIZE && yycheck[yyn] == 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))
515                {
516                    goto yyoverflow;
517                }
518                yystate = yytable[yyn];
519                *++yystack.s_mark = yytable[yyn];
520                *++yystack.l_mark = yylval;
521                goto yyloop;
522            }
523            else
524            {
525#if YYDEBUG
526                if (yydebug)
527                    printf("%sdebug: error recovery discarding state %d\n",
528                            YYPREFIX, *yystack.s_mark);
529#endif
530                if (yystack.s_mark <= yystack.s_base) goto yyabort;
531                --yystack.s_mark;
532                --yystack.l_mark;
533            }
534        }
535    }
536    else
537    {
538        if (yychar == 0) goto yyabort;
539#if YYDEBUG
540        if (yydebug)
541        {
542            yys = 0;
543            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
544            if (!yys) yys = "illegal-symbol";
545            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
546                    YYPREFIX, yystate, yychar, yys);
547        }
548#endif
549        yychar = YYEMPTY;
550        goto yyloop;
551    }
552
553yyreduce:
554#if YYDEBUG
555    if (yydebug)
556        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
557                YYPREFIX, yystate, yyn, yyrule[yyn]);
558#endif
559    yym = yylen[yyn];
560    if (yym)
561        yyval = yystack.l_mark[1-yym];
562    else
563        memset(&yyval, 0, sizeof yyval);
564    switch (yyn)
565    {
566case 3:
567#line 35 "quote_calc.y"
568	{  yyerrok ; }
569break;
570case 4:
571#line 39 "quote_calc.y"
572	{  printf("%d\n",yystack.l_mark[0]);}
573break;
574case 5:
575#line 41 "quote_calc.y"
576	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
577break;
578case 6:
579#line 45 "quote_calc.y"
580	{  yyval = yystack.l_mark[-1]; }
581break;
582case 7:
583#line 47 "quote_calc.y"
584	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
585break;
586case 8:
587#line 49 "quote_calc.y"
588	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
589break;
590case 9:
591#line 51 "quote_calc.y"
592	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
593break;
594case 10:
595#line 53 "quote_calc.y"
596	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
597break;
598case 11:
599#line 55 "quote_calc.y"
600	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
601break;
602case 12:
603#line 57 "quote_calc.y"
604	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
605break;
606case 13:
607#line 59 "quote_calc.y"
608	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
609break;
610case 14:
611#line 61 "quote_calc.y"
612	{  yyval = - yystack.l_mark[0]; }
613break;
614case 15:
615#line 63 "quote_calc.y"
616	{  yyval = regs[yystack.l_mark[0]]; }
617break;
618case 17:
619#line 68 "quote_calc.y"
620	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
621break;
622case 18:
623#line 70 "quote_calc.y"
624	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
625break;
626#line 627 "quote_calc-s.tab.c"
627    }
628    yystack.s_mark -= yym;
629    yystate = *yystack.s_mark;
630    yystack.l_mark -= yym;
631    yym = yylhs[yyn];
632    if (yystate == 0 && yym == 0)
633    {
634#if YYDEBUG
635        if (yydebug)
636            printf("%sdebug: after reduction, shifting from state 0 to\
637 state %d\n", YYPREFIX, YYFINAL);
638#endif
639        yystate = YYFINAL;
640        *++yystack.s_mark = YYFINAL;
641        *++yystack.l_mark = yyval;
642        if (yychar < 0)
643        {
644            if ((yychar = YYLEX) < 0) yychar = 0;
645#if YYDEBUG
646            if (yydebug)
647            {
648                yys = 0;
649                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
650                if (!yys) yys = "illegal-symbol";
651                printf("%sdebug: state %d, reading %d (%s)\n",
652                        YYPREFIX, YYFINAL, yychar, yys);
653            }
654#endif
655        }
656        if (yychar == 0) 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 \
667to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
668#endif
669    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
670    {
671        goto yyoverflow;
672    }
673    *++yystack.s_mark = (short) yystate;
674    *++yystack.l_mark = yyval;
675    goto yyloop;
676
677yyoverflow:
678    yyerror("yacc stack overflow");
679
680yyabort:
681    yyfreestack(&yystack);
682    return (1);
683
684yyaccept:
685    yyfreestack(&yystack);
686    return (0);
687}
688