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