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