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