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
main(void)334 main (void)
335 {
336 while(!feof(stdin)) {
337 yyparse();
338 }
339 return 0;
340 }
341
342 static void
yyerror(const char * s)343 yyerror(const char *s)
344 {
345 fprintf(stderr, "%s\n", s);
346 }
347
348 int
yylex(void)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 */
yygrowstack(YYSTACKDATA * data)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)
yyfreestack(YYSTACKDATA * data)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
YYPARSE_DECL()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