quote_calc4-s.tab.c revision 1.4
1/*	$NetBSD: quote_calc4-s.tab.c,v 1.4 2021/02/20 22:57:57 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 2
9#define YYMINOR 0
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
297#if YYDEBUG
298int      yydebug;
299#endif
300
301int      yyerrflag;
302int      yychar;
303YYSTYPE  yyval;
304YYSTYPE  yylval;
305int      yynerrs;
306
307/* define the initial stack-sizes */
308#ifdef YYSTACKSIZE
309#undef YYMAXDEPTH
310#define YYMAXDEPTH  YYSTACKSIZE
311#else
312#ifdef YYMAXDEPTH
313#define YYSTACKSIZE YYMAXDEPTH
314#else
315#define YYSTACKSIZE 10000
316#define YYMAXDEPTH  10000
317#endif
318#endif
319
320#define YYINITSTACKSIZE 200
321
322typedef struct {
323    unsigned stacksize;
324    YYINT    *s_base;
325    YYINT    *s_mark;
326    YYINT    *s_last;
327    YYSTYPE  *l_base;
328    YYSTYPE  *l_mark;
329} YYSTACKDATA;
330/* variables for the parser stack */
331static YYSTACKDATA yystack;
332#line 73 "quote_calc4.y"
333 /* start of programs */
334
335int
336main (void)
337{
338    while(!feof(stdin)) {
339	yyparse();
340    }
341    return 0;
342}
343
344static void
345yyerror(const char *s)
346{
347    fprintf(stderr, "%s\n", s);
348}
349
350int
351yylex(void) {
352	/* lexical analysis routine */
353	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
354	/* return DIGIT for a digit, yylval = 0 through 9 */
355	/* all other characters are returned immediately */
356
357    int c;
358
359    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
360
361    /* c is now nonblank */
362
363    if( islower( c )) {
364	yylval = c - 'a';
365	return ( LETTER );
366    }
367    if( isdigit( c )) {
368	yylval = c - '0';
369	return ( DIGIT );
370    }
371    return( c );
372}
373#line 372 "quote_calc4-s.tab.c"
374
375#if YYDEBUG
376#include <stdio.h>	/* needed for printf */
377#endif
378
379#include <stdlib.h>	/* needed for malloc, etc */
380#include <string.h>	/* needed for memset */
381
382/* allocate initial stack or double stack size, up to YYMAXDEPTH */
383static int yygrowstack(YYSTACKDATA *data)
384{
385    int i;
386    unsigned newsize;
387    YYINT *newss;
388    YYSTYPE *newvs;
389
390    if ((newsize = data->stacksize) == 0)
391        newsize = YYINITSTACKSIZE;
392    else if (newsize >= YYMAXDEPTH)
393        return YYENOMEM;
394    else if ((newsize *= 2) > YYMAXDEPTH)
395        newsize = YYMAXDEPTH;
396
397    i = (int) (data->s_mark - data->s_base);
398    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
399    if (newss == 0)
400        return YYENOMEM;
401
402    data->s_base = newss;
403    data->s_mark = newss + i;
404
405    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
406    if (newvs == 0)
407        return YYENOMEM;
408
409    data->l_base = newvs;
410    data->l_mark = newvs + i;
411
412    data->stacksize = newsize;
413    data->s_last = data->s_base + newsize - 1;
414    return 0;
415}
416
417#if YYPURE || defined(YY_NO_LEAKS)
418static void yyfreestack(YYSTACKDATA *data)
419{
420    free(data->s_base);
421    free(data->l_base);
422    memset(data, 0, sizeof(*data));
423}
424#else
425#define yyfreestack(data) /* nothing */
426#endif
427
428#define YYABORT  goto yyabort
429#define YYREJECT goto yyabort
430#define YYACCEPT goto yyaccept
431#define YYERROR  goto yyerrlab
432
433int
434YYPARSE_DECL()
435{
436    int yym, yyn, yystate;
437#if YYDEBUG
438    const char *yys;
439
440    if ((yys = getenv("YYDEBUG")) != 0)
441    {
442        yyn = *yys;
443        if (yyn >= '0' && yyn <= '9')
444            yydebug = yyn - '0';
445    }
446#endif
447
448    yym = 0;
449    yyn = 0;
450    yynerrs = 0;
451    yyerrflag = 0;
452    yychar = YYEMPTY;
453    yystate = 0;
454
455#if YYPURE
456    memset(&yystack, 0, sizeof(yystack));
457#endif
458
459    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
460    yystack.s_mark = yystack.s_base;
461    yystack.l_mark = yystack.l_base;
462    yystate = 0;
463    *yystack.s_mark = 0;
464
465yyloop:
466    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
467    if (yychar < 0)
468    {
469        yychar = YYLEX;
470        if (yychar < 0) yychar = YYEOF;
471#if YYDEBUG
472        if (yydebug)
473        {
474            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
475            printf("%sdebug: state %d, reading %d (%s)\n",
476                    YYPREFIX, yystate, yychar, yys);
477        }
478#endif
479    }
480    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
481            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
482    {
483#if YYDEBUG
484        if (yydebug)
485            printf("%sdebug: state %d, shifting to state %d\n",
486                    YYPREFIX, yystate, yytable[yyn]);
487#endif
488        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
489        yystate = yytable[yyn];
490        *++yystack.s_mark = yytable[yyn];
491        *++yystack.l_mark = yylval;
492        yychar = YYEMPTY;
493        if (yyerrflag > 0)  --yyerrflag;
494        goto yyloop;
495    }
496    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
497            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
498    {
499        yyn = yytable[yyn];
500        goto yyreduce;
501    }
502    if (yyerrflag != 0) goto yyinrecovery;
503
504    YYERROR_CALL("syntax error");
505
506    goto yyerrlab; /* redundant goto avoids 'unused label' warning */
507yyerrlab:
508    ++yynerrs;
509
510yyinrecovery:
511    if (yyerrflag < 3)
512    {
513        yyerrflag = 3;
514        for (;;)
515        {
516            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
517                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
518            {
519#if YYDEBUG
520                if (yydebug)
521                    printf("%sdebug: state %d, error recovery shifting\
522 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
523#endif
524                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
525                yystate = yytable[yyn];
526                *++yystack.s_mark = yytable[yyn];
527                *++yystack.l_mark = yylval;
528                goto yyloop;
529            }
530            else
531            {
532#if YYDEBUG
533                if (yydebug)
534                    printf("%sdebug: error recovery discarding state %d\n",
535                            YYPREFIX, *yystack.s_mark);
536#endif
537                if (yystack.s_mark <= yystack.s_base) goto yyabort;
538                --yystack.s_mark;
539                --yystack.l_mark;
540            }
541        }
542    }
543    else
544    {
545        if (yychar == YYEOF) goto yyabort;
546#if YYDEBUG
547        if (yydebug)
548        {
549            if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
550            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
551                    YYPREFIX, yystate, yychar, yys);
552        }
553#endif
554        yychar = YYEMPTY;
555        goto yyloop;
556    }
557
558yyreduce:
559#if YYDEBUG
560    if (yydebug)
561        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
562                YYPREFIX, yystate, yyn, yyrule[yyn]);
563#endif
564    yym = yylen[yyn];
565    if (yym > 0)
566        yyval = yystack.l_mark[1-yym];
567    else
568        memset(&yyval, 0, sizeof yyval);
569
570    switch (yyn)
571    {
572case 3:
573#line 35 "quote_calc4.y"
574	{  yyerrok ; }
575break;
576case 4:
577#line 39 "quote_calc4.y"
578	{  printf("%d\n",yystack.l_mark[0]);}
579break;
580case 5:
581#line 41 "quote_calc4.y"
582	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
583break;
584case 6:
585#line 45 "quote_calc4.y"
586	{  yyval = yystack.l_mark[-1]; }
587break;
588case 7:
589#line 47 "quote_calc4.y"
590	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
591break;
592case 8:
593#line 49 "quote_calc4.y"
594	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
595break;
596case 9:
597#line 51 "quote_calc4.y"
598	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
599break;
600case 10:
601#line 53 "quote_calc4.y"
602	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
603break;
604case 11:
605#line 55 "quote_calc4.y"
606	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
607break;
608case 12:
609#line 57 "quote_calc4.y"
610	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
611break;
612case 13:
613#line 59 "quote_calc4.y"
614	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
615break;
616case 14:
617#line 61 "quote_calc4.y"
618	{  yyval = - yystack.l_mark[0]; }
619break;
620case 15:
621#line 63 "quote_calc4.y"
622	{  yyval = regs[yystack.l_mark[0]]; }
623break;
624case 17:
625#line 68 "quote_calc4.y"
626	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
627break;
628case 18:
629#line 70 "quote_calc4.y"
630	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
631break;
632#line 631 "quote_calc4-s.tab.c"
633    }
634    yystack.s_mark -= yym;
635    yystate = *yystack.s_mark;
636    yystack.l_mark -= yym;
637    yym = yylhs[yyn];
638    if (yystate == 0 && yym == 0)
639    {
640#if YYDEBUG
641        if (yydebug)
642            printf("%sdebug: after reduction, shifting from state 0 to\
643 state %d\n", YYPREFIX, YYFINAL);
644#endif
645        yystate = YYFINAL;
646        *++yystack.s_mark = YYFINAL;
647        *++yystack.l_mark = yyval;
648        if (yychar < 0)
649        {
650            yychar = YYLEX;
651            if (yychar < 0) yychar = YYEOF;
652#if YYDEBUG
653            if (yydebug)
654            {
655                if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
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]) != 0) && (yyn += yystate) >= 0 &&
665            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) goto yyoverflow;
675    *++yystack.s_mark = (YYINT) yystate;
676    *++yystack.l_mark = yyval;
677    goto yyloop;
678
679yyoverflow:
680    YYERROR_CALL("yacc stack overflow");
681
682yyabort:
683    yyfreestack(&yystack);
684    return (1);
685
686yyaccept:
687    yyfreestack(&yystack);
688    return (0);
689}
690