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 2
7 #define YYMINOR 0
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_calc4_parse
19 #endif /* yyparse */
20 
21 #ifndef yylex
22 #define yylex      quote_calc4_lex
23 #endif /* yylex */
24 
25 #ifndef yyerror
26 #define yyerror    quote_calc4_error
27 #endif /* yyerror */
28 
29 #ifndef yychar
30 #define yychar     quote_calc4_char
31 #endif /* yychar */
32 
33 #ifndef yyval
34 #define yyval      quote_calc4_val
35 #endif /* yyval */
36 
37 #ifndef yylval
38 #define yylval     quote_calc4_lval
39 #endif /* yylval */
40 
41 #ifndef yydebug
42 #define yydebug    quote_calc4_debug
43 #endif /* yydebug */
44 
45 #ifndef yynerrs
46 #define yynerrs    quote_calc4_nerrs
47 #endif /* yynerrs */
48 
49 #ifndef yyerrflag
50 #define yyerrflag  quote_calc4_errflag
51 #endif /* yyerrflag */
52 
53 #ifndef yylhs
54 #define yylhs      quote_calc4_lhs
55 #endif /* yylhs */
56 
57 #ifndef yylen
58 #define yylen      quote_calc4_len
59 #endif /* yylen */
60 
61 #ifndef yydefred
62 #define yydefred   quote_calc4_defred
63 #endif /* yydefred */
64 
65 #ifndef yydgoto
66 #define yydgoto    quote_calc4_dgoto
67 #endif /* yydgoto */
68 
69 #ifndef yysindex
70 #define yysindex   quote_calc4_sindex
71 #endif /* yysindex */
72 
73 #ifndef yyrindex
74 #define yyrindex   quote_calc4_rindex
75 #endif /* yyrindex */
76 
77 #ifndef yygindex
78 #define yygindex   quote_calc4_gindex
79 #endif /* yygindex */
80 
81 #ifndef yytable
82 #define yytable    quote_calc4_table
83 #endif /* yytable */
84 
85 #ifndef yycheck
86 #define yycheck    quote_calc4_check
87 #endif /* yycheck */
88 
89 #ifndef yyname
90 #define yyname     quote_calc4_name
91 #endif /* yyname */
92 
93 #ifndef yyrule
94 #define yyrule     quote_calc4_rule
95 #endif /* yyrule */
96 #define YYPREFIX "quote_calc4_"
97 
98 #define YYPURE 0
99 
100 #line 2 "quote_calc4.y"
101 # include <stdio.h>
102 # include <ctype.h>
103 
104 int regs[26];
105 int base;
106 
107 int yylex(void);
108 static void yyerror(const char *s);
109 
110 #line 111 "quote_calc4.tab.c"
111 
112 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
113 /* Default: YYSTYPE is the semantic value type. */
114 typedef 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 
147 extern int YYPARSE_DECL();
148 
149 #define OP_ADD 257
150 #define OP_SUB 259
151 #define OP_MUL 261
152 #define OP_DIV 263
153 #define OP_MOD 265
154 #define OP_AND 267
155 #define DIGIT 269
156 #define LETTER 270
157 #define UMINUS 271
158 #define YYERRCODE 256
159 typedef int YYINT;
160 static const YYINT quote_calc4_lhs[] = {                 -1,
161     0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
162     2,    2,    2,    2,    2,    2,    3,    3,
163 };
164 static const YYINT quote_calc4_len[] = {                  2,
165     0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
166     3,    3,    3,    2,    1,    1,    1,    2,
167 };
168 static const YYINT quote_calc4_defred[] = {               1,
169     0,    0,    0,   17,    0,    0,    0,    0,    0,    3,
170    15,    0,    0,    0,    2,    0,    0,    0,    0,    0,
171     0,    0,   18,    0,    6,    0,    0,    0,    0,    0,
172     0,    0,
173 };
174 static const YYINT quote_calc4_dgoto[] = {                1,
175     7,    8,    9,
176 };
177 static const YYINT quote_calc4_sindex[] = {               0,
178   -38,    4,  -36,    0,  -51,  -36,    6, -121, -249,    0,
179     0, -243,  -36,  -23,    0,  -36,  -36,  -36,  -36,  -36,
180   -36,  -36,    0, -121,    0, -121, -121, -121, -121, -121,
181  -121, -243,
182 };
183 static const YYINT quote_calc4_rindex[] = {               0,
184     0,    0,    0,    0,   -9,    0,    0,   12,  -10,    0,
185     0,   -5,    0,    0,    0,    0,    0,    0,    0,    0,
186     0,    0,    0,   14,    0,   -3,   -2,   -1,    1,    2,
187     3,   -4,
188 };
189 static const YYINT quote_calc4_gindex[] = {               0,
190     0,   42,    0,
191 };
192 #define YYTABLESIZE 259
193 static const YYINT quote_calc4_table[] = {               16,
194    15,    6,   22,    6,   14,   13,    7,    8,    9,   13,
195    10,   11,   12,   10,   16,   15,   17,   25,   18,   23,
196    19,    4,   20,    5,   21,    0,    0,    0,    0,    0,
197    16,    0,    0,    0,    0,   14,   13,    7,    8,    9,
198     0,   10,   11,   12,   12,    0,    0,   14,    0,    0,
199     0,    0,    0,    0,   24,    0,    0,   26,   27,   28,
200    29,   30,   31,   32,    0,    0,    0,    0,    0,    0,
201     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
202     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
203     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
204    22,    0,    0,    0,    0,    0,    0,    0,    0,    0,
205     0,    0,    0,   16,   15,    0,    0,    0,   14,   13,
206     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
207     0,    0,    0,    0,    0,    0,   16,    0,   17,    0,
208    18,    0,   19,    0,   20,    0,   21,    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,    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,    2,    0,    0,
216     0,    3,    0,    3,    0,    0,    0,    0,    0,    0,
217     4,    5,    4,   11,   16,    0,   17,    0,   18,    0,
218    19,    0,   20,    0,   21,    0,    0,   16,   15,   16,
219    15,   16,   15,   16,   15,   16,   15,   16,   15,
220 };
221 static const YYINT quote_calc4_check[] = {               10,
222    10,   40,  124,   40,   10,   10,   10,   10,   10,   61,
223    10,   10,   10,   10,  258,   10,  260,   41,  262,  269,
224   264,   10,  266,   10,  268,   -1,   -1,   -1,   -1,   -1,
225    41,   -1,   -1,   -1,   -1,   41,   41,   41,   41,   41,
226    -1,   41,   41,   41,    3,   -1,   -1,    6,   -1,   -1,
227    -1,   -1,   -1,   -1,   13,   -1,   -1,   16,   17,   18,
228    19,   20,   21,   22,   -1,   -1,   -1,   -1,   -1,   -1,
229    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
230    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
231    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
232   124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
233    -1,   -1,   -1,  124,  124,   -1,   -1,   -1,  124,  124,
234    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
235    -1,   -1,   -1,   -1,   -1,   -1,  258,   -1,  260,   -1,
236   262,   -1,  264,   -1,  266,   -1,  268,   -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,   -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,  256,   -1,   -1,
244    -1,  260,   -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,
245   269,  270,  269,  270,  258,   -1,  260,   -1,  262,   -1,
246   264,   -1,  266,   -1,  268,   -1,   -1,  258,  258,  260,
247   260,  262,  262,  264,  264,  266,  266,  268,  268,
248 };
249 #define YYFINAL 1
250 #ifndef YYDEBUG
251 #define YYDEBUG 0
252 #endif
253 #define YYMAXTOKEN 271
254 #define YYUNDFTOKEN 277
255 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
256 #if YYDEBUG
257 static const char *const quote_calc4_name[] = {
258 
259 "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,
260 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
261 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
262 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
263 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
264 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
266 0,0,0,0,0,0,"OP_ADD","\"ADD-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
267 "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
268 "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
269 "illegal-symbol",
270 };
271 static const char *const quote_calc4_rule[] = {
272 "$accept : list",
273 "list :",
274 "list : list stat '\\n'",
275 "list : list error '\\n'",
276 "stat : expr",
277 "stat : LETTER '=' expr",
278 "expr : '(' expr ')'",
279 "expr : expr \"ADD-operator\" expr",
280 "expr : expr \"SUB-operator\" expr",
281 "expr : expr \"MUL-operator\" expr",
282 "expr : expr \"DIV-operator\" expr",
283 "expr : expr \"MOD-operator\" expr",
284 "expr : expr \"AND-operator\" expr",
285 "expr : expr '|' expr",
286 "expr : \"SUB-operator\" expr",
287 "expr : LETTER",
288 "expr : number",
289 "number : DIGIT",
290 "number : number DIGIT",
291 
292 };
293 #endif
294 
295 #if YYDEBUG
296 int      yydebug;
297 #endif
298 
299 int      yyerrflag;
300 int      yychar;
301 YYSTYPE  yyval;
302 YYSTYPE  yylval;
303 int      yynerrs;
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 
320 typedef 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 */
329 static YYSTACKDATA yystack;
330 #line 73 "quote_calc4.y"
331  /* start of programs */
332 
333 int
334 main (void)
335 {
336     while(!feof(stdin)) {
337 	yyparse();
338     }
339     return 0;
340 }
341 
342 static void
343 yyerror(const char *s)
344 {
345     fprintf(stderr, "%s\n", s);
346 }
347 
348 int
349 yylex(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 372 "quote_calc4.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 */
381 static 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 == NULL)
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 == NULL)
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)
416 static 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 
431 int
432 YYPARSE_DECL()
433 {
434     int yym, yyn, yystate;
435 #if YYDEBUG
436     const char *yys;
437 
438     if ((yys = getenv("YYDEBUG")) != NULL)
439     {
440         yyn = *yys;
441         if (yyn >= '0' && yyn <= '9')
442             yydebug = yyn - '0';
443     }
444 #endif
445 
446     /* yym is set below */
447     /* yyn is set below */
448     yynerrs = 0;
449     yyerrflag = 0;
450     yychar = YYEMPTY;
451     yystate = 0;
452 
453 #if YYPURE
454     memset(&yystack, 0, sizeof(yystack));
455 #endif
456 
457     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
458     yystack.s_mark = yystack.s_base;
459     yystack.l_mark = yystack.l_base;
460     yystate = 0;
461     *yystack.s_mark = 0;
462 
463 yyloop:
464     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
465     if (yychar < 0)
466     {
467         yychar = YYLEX;
468         if (yychar < 0) yychar = YYEOF;
469 #if YYDEBUG
470         if (yydebug)
471         {
472             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
473             printf("%sdebug: state %d, reading %d (%s)\n",
474                     YYPREFIX, yystate, yychar, yys);
475         }
476 #endif
477     }
478     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
479             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) goto yyoverflow;
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]) != 0) && (yyn += yychar) >= 0 &&
495             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
496     {
497         yyn = yytable[yyn];
498         goto yyreduce;
499     }
500     if (yyerrflag != 0) goto yyinrecovery;
501 
502     YYERROR_CALL("syntax error");
503 
504     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
505 yyerrlab:
506     ++yynerrs;
507 
508 yyinrecovery:
509     if (yyerrflag < 3)
510     {
511         yyerrflag = 3;
512         for (;;)
513         {
514             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
515                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
516             {
517 #if YYDEBUG
518                 if (yydebug)
519                     printf("%sdebug: state %d, error recovery shifting\
520  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
521 #endif
522                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
523                 yystate = yytable[yyn];
524                 *++yystack.s_mark = yytable[yyn];
525                 *++yystack.l_mark = yylval;
526                 goto yyloop;
527             }
528             else
529             {
530 #if YYDEBUG
531                 if (yydebug)
532                     printf("%sdebug: error recovery discarding state %d\n",
533                             YYPREFIX, *yystack.s_mark);
534 #endif
535                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
536                 --yystack.s_mark;
537                 --yystack.l_mark;
538             }
539         }
540     }
541     else
542     {
543         if (yychar == YYEOF) goto yyabort;
544 #if YYDEBUG
545         if (yydebug)
546         {
547             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
548             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
549                     YYPREFIX, yystate, yychar, yys);
550         }
551 #endif
552         yychar = YYEMPTY;
553         goto yyloop;
554     }
555 
556 yyreduce:
557 #if YYDEBUG
558     if (yydebug)
559         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
560                 YYPREFIX, yystate, yyn, yyrule[yyn]);
561 #endif
562     yym = yylen[yyn];
563     if (yym > 0)
564         yyval = yystack.l_mark[1-yym];
565     else
566         memset(&yyval, 0, sizeof yyval);
567 
568     switch (yyn)
569     {
570 case 3:
571 #line 35 "quote_calc4.y"
572 	{  yyerrok ; }
573 #line 574 "quote_calc4.tab.c"
574 break;
575 case 4:
576 #line 39 "quote_calc4.y"
577 	{  printf("%d\n",yystack.l_mark[0]);}
578 #line 579 "quote_calc4.tab.c"
579 break;
580 case 5:
581 #line 41 "quote_calc4.y"
582 	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
583 #line 584 "quote_calc4.tab.c"
584 break;
585 case 6:
586 #line 45 "quote_calc4.y"
587 	{  yyval = yystack.l_mark[-1]; }
588 #line 589 "quote_calc4.tab.c"
589 break;
590 case 7:
591 #line 47 "quote_calc4.y"
592 	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
593 #line 594 "quote_calc4.tab.c"
594 break;
595 case 8:
596 #line 49 "quote_calc4.y"
597 	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
598 #line 599 "quote_calc4.tab.c"
599 break;
600 case 9:
601 #line 51 "quote_calc4.y"
602 	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
603 #line 604 "quote_calc4.tab.c"
604 break;
605 case 10:
606 #line 53 "quote_calc4.y"
607 	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
608 #line 609 "quote_calc4.tab.c"
609 break;
610 case 11:
611 #line 55 "quote_calc4.y"
612 	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
613 #line 614 "quote_calc4.tab.c"
614 break;
615 case 12:
616 #line 57 "quote_calc4.y"
617 	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
618 #line 619 "quote_calc4.tab.c"
619 break;
620 case 13:
621 #line 59 "quote_calc4.y"
622 	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
623 #line 624 "quote_calc4.tab.c"
624 break;
625 case 14:
626 #line 61 "quote_calc4.y"
627 	{  yyval = - yystack.l_mark[0]; }
628 #line 629 "quote_calc4.tab.c"
629 break;
630 case 15:
631 #line 63 "quote_calc4.y"
632 	{  yyval = regs[yystack.l_mark[0]]; }
633 #line 634 "quote_calc4.tab.c"
634 break;
635 case 17:
636 #line 68 "quote_calc4.y"
637 	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
638 #line 639 "quote_calc4.tab.c"
639 break;
640 case 18:
641 #line 70 "quote_calc4.y"
642 	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
643 #line 644 "quote_calc4.tab.c"
644 break;
645 #line 646 "quote_calc4.tab.c"
646     }
647     yystack.s_mark -= yym;
648     yystate = *yystack.s_mark;
649     yystack.l_mark -= yym;
650     yym = yylhs[yyn];
651     if (yystate == 0 && yym == 0)
652     {
653 #if YYDEBUG
654         if (yydebug)
655             printf("%sdebug: after reduction, shifting from state 0 to\
656  state %d\n", YYPREFIX, YYFINAL);
657 #endif
658         yystate = YYFINAL;
659         *++yystack.s_mark = YYFINAL;
660         *++yystack.l_mark = yyval;
661         if (yychar < 0)
662         {
663             yychar = YYLEX;
664             if (yychar < 0) yychar = YYEOF;
665 #if YYDEBUG
666             if (yydebug)
667             {
668                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
669                 printf("%sdebug: state %d, reading %d (%s)\n",
670                         YYPREFIX, YYFINAL, yychar, yys);
671             }
672 #endif
673         }
674         if (yychar == YYEOF) goto yyaccept;
675         goto yyloop;
676     }
677     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
678             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
679         yystate = yytable[yyn];
680     else
681         yystate = yydgoto[yym];
682 #if YYDEBUG
683     if (yydebug)
684         printf("%sdebug: after reduction, shifting from state %d \
685 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
686 #endif
687     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
688     *++yystack.s_mark = (YYINT) yystate;
689     *++yystack.l_mark = yyval;
690     goto yyloop;
691 
692 yyoverflow:
693     YYERROR_CALL("yacc stack overflow");
694 
695 yyabort:
696     yyfreestack(&yystack);
697     return (1);
698 
699 yyaccept:
700     yyfreestack(&yystack);
701     return (0);
702 }
703