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_calc_parse
19 #endif /* yyparse */
20
21 #ifndef yylex
22 #define yylex quote_calc_lex
23 #endif /* yylex */
24
25 #ifndef yyerror
26 #define yyerror quote_calc_error
27 #endif /* yyerror */
28
29 #ifndef yychar
30 #define yychar quote_calc_char
31 #endif /* yychar */
32
33 #ifndef yyval
34 #define yyval quote_calc_val
35 #endif /* yyval */
36
37 #ifndef yylval
38 #define yylval quote_calc_lval
39 #endif /* yylval */
40
41 #ifndef yydebug
42 #define yydebug quote_calc_debug
43 #endif /* yydebug */
44
45 #ifndef yynerrs
46 #define yynerrs quote_calc_nerrs
47 #endif /* yynerrs */
48
49 #ifndef yyerrflag
50 #define yyerrflag quote_calc_errflag
51 #endif /* yyerrflag */
52
53 #ifndef yylhs
54 #define yylhs quote_calc_lhs
55 #endif /* yylhs */
56
57 #ifndef yylen
58 #define yylen quote_calc_len
59 #endif /* yylen */
60
61 #ifndef yydefred
62 #define yydefred quote_calc_defred
63 #endif /* yydefred */
64
65 #ifndef yydgoto
66 #define yydgoto quote_calc_dgoto
67 #endif /* yydgoto */
68
69 #ifndef yysindex
70 #define yysindex quote_calc_sindex
71 #endif /* yysindex */
72
73 #ifndef yyrindex
74 #define yyrindex quote_calc_rindex
75 #endif /* yyrindex */
76
77 #ifndef yygindex
78 #define yygindex quote_calc_gindex
79 #endif /* yygindex */
80
81 #ifndef yytable
82 #define yytable quote_calc_table
83 #endif /* yytable */
84
85 #ifndef yycheck
86 #define yycheck quote_calc_check
87 #endif /* yycheck */
88
89 #ifndef yyname
90 #define yyname quote_calc_name
91 #endif /* yyname */
92
93 #ifndef yyrule
94 #define yyrule quote_calc_rule
95 #endif /* yyrule */
96 #define YYPREFIX "quote_calc_"
97
98 #define YYPURE 0
99
100 #line 2 "quote_calc.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_calc.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 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
165 typedef int YYINT;
166 static const YYINT quote_calc_lhs[] = { -1,
167 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
168 2, 2, 2, 2, 2, 2, 3, 3,
169 };
170 static const YYINT quote_calc_len[] = { 2,
171 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
172 3, 3, 3, 2, 1, 1, 1, 2,
173 };
174 static const YYINT quote_calc_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 };
180 static const YYINT quote_calc_dgoto[] = { 1,
181 7, 8, 9,
182 };
183 static const YYINT quote_calc_sindex[] = { 0,
184 -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
185 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
186 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
187 -121, -243,
188 };
189 static const YYINT quote_calc_rindex[] = { 0,
190 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
191 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
193 3, -4,
194 };
195 static const YYINT quote_calc_gindex[] = { 0,
196 0, 42, 0,
197 };
198 #define YYTABLESIZE 258
199 static const YYINT quote_calc_table[] = { 16,
200 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
201 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
202 23, 20, 4, 21, 5, 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 0, 22, 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, 16, 0, 17, 0, 18,
214 0, 19, 0, 20, 0, 21, 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, 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 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
223 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
224 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
225 16, 15, 16, 15, 16, 15, 16, 15,
226 };
227 static const YYINT quote_calc_check[] = { 10,
228 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
229 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
230 269, 265, 10, 267, 10, -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 -1, 124, -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, 257, -1, 259, -1, 261,
242 -1, 263, -1, 265, -1, 267, -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, -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 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
251 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
252 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
253 261, 261, 263, 263, 265, 265, 267, 267,
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
263 static const char *const quote_calc_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,
266 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
267 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,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,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,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,"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,
274 0,0,"illegal-symbol",
275 };
276 static const char *const quote_calc_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 OP_ADD expr",
285 "expr : expr OP_SUB expr",
286 "expr : expr OP_MUL expr",
287 "expr : expr OP_DIV expr",
288 "expr : expr OP_MOD expr",
289 "expr : expr OP_AND expr",
290 "expr : expr '|' expr",
291 "expr : OP_SUB expr",
292 "expr : LETTER",
293 "expr : number",
294 "number : DIGIT",
295 "number : number DIGIT",
296
297 };
298 #endif
299
300 int yydebug;
301 int yynerrs;
302
303 int yyerrflag;
304 int yychar;
305 YYSTYPE yyval;
306 YYSTYPE 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
323 typedef 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 */
332 static YYSTACKDATA yystack;
333 #line 73 "quote_calc.y"
334 /* start of programs */
335
336 int
main(void)337 main (void)
338 {
339 while(!feof(stdin)) {
340 yyparse();
341 }
342 return 0;
343 }
344
345 static void
yyerror(const char * s)346 yyerror(const char *s)
347 {
348 fprintf(stderr, "%s\n", s);
349 }
350
351 int
yylex(void)352 yylex(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_calc.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 */
yygrowstack(YYSTACKDATA * data)384 static 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)
yyfreestack(YYSTACKDATA * data)419 static 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
434 int
YYPARSE_DECL()435 YYPARSE_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 yym = 0;
450 yyn = 0;
451 yynerrs = 0;
452 yyerrflag = 0;
453 yychar = YYEMPTY;
454 yystate = 0;
455
456 #if YYPURE
457 memset(&yystack, 0, sizeof(yystack));
458 #endif
459
460 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
461 yystack.s_mark = yystack.s_base;
462 yystack.l_mark = yystack.l_base;
463 yystate = 0;
464 *yystack.s_mark = 0;
465
466 yyloop:
467 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
468 if (yychar < 0)
469 {
470 yychar = YYLEX;
471 if (yychar < 0) yychar = YYEOF;
472 #if YYDEBUG
473 if (yydebug)
474 {
475 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
476 printf("%sdebug: state %d, reading %d (%s)\n",
477 YYPREFIX, yystate, yychar, yys);
478 }
479 #endif
480 }
481 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
482 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
483 {
484 #if YYDEBUG
485 if (yydebug)
486 printf("%sdebug: state %d, shifting to state %d\n",
487 YYPREFIX, yystate, yytable[yyn]);
488 #endif
489 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
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]) != 0) && (yyn += yychar) >= 0 &&
498 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
499 {
500 yyn = yytable[yyn];
501 goto yyreduce;
502 }
503 if (yyerrflag != 0) goto yyinrecovery;
504
505 YYERROR_CALL("syntax error");
506
507 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
508 yyerrlab:
509 ++yynerrs;
510
511 yyinrecovery:
512 if (yyerrflag < 3)
513 {
514 yyerrflag = 3;
515 for (;;)
516 {
517 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
518 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
519 {
520 #if YYDEBUG
521 if (yydebug)
522 printf("%sdebug: state %d, error recovery shifting\
523 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
524 #endif
525 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
526 yystate = yytable[yyn];
527 *++yystack.s_mark = yytable[yyn];
528 *++yystack.l_mark = yylval;
529 goto yyloop;
530 }
531 else
532 {
533 #if YYDEBUG
534 if (yydebug)
535 printf("%sdebug: error recovery discarding state %d\n",
536 YYPREFIX, *yystack.s_mark);
537 #endif
538 if (yystack.s_mark <= yystack.s_base) goto yyabort;
539 --yystack.s_mark;
540 --yystack.l_mark;
541 }
542 }
543 }
544 else
545 {
546 if (yychar == YYEOF) goto yyabort;
547 #if YYDEBUG
548 if (yydebug)
549 {
550 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
551 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
552 YYPREFIX, yystate, yychar, yys);
553 }
554 #endif
555 yychar = YYEMPTY;
556 goto yyloop;
557 }
558
559 yyreduce:
560 #if YYDEBUG
561 if (yydebug)
562 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
563 YYPREFIX, yystate, yyn, yyrule[yyn]);
564 #endif
565 yym = yylen[yyn];
566 if (yym > 0)
567 yyval = yystack.l_mark[1-yym];
568 else
569 memset(&yyval, 0, sizeof yyval);
570
571 switch (yyn)
572 {
573 case 3:
574 #line 35 "quote_calc.y"
575 { yyerrok ; }
576 break;
577 case 4:
578 #line 39 "quote_calc.y"
579 { printf("%d\n",yystack.l_mark[0]);}
580 break;
581 case 5:
582 #line 41 "quote_calc.y"
583 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
584 break;
585 case 6:
586 #line 45 "quote_calc.y"
587 { yyval = yystack.l_mark[-1]; }
588 break;
589 case 7:
590 #line 47 "quote_calc.y"
591 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
592 break;
593 case 8:
594 #line 49 "quote_calc.y"
595 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
596 break;
597 case 9:
598 #line 51 "quote_calc.y"
599 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
600 break;
601 case 10:
602 #line 53 "quote_calc.y"
603 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
604 break;
605 case 11:
606 #line 55 "quote_calc.y"
607 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
608 break;
609 case 12:
610 #line 57 "quote_calc.y"
611 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
612 break;
613 case 13:
614 #line 59 "quote_calc.y"
615 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
616 break;
617 case 14:
618 #line 61 "quote_calc.y"
619 { yyval = - yystack.l_mark[0]; }
620 break;
621 case 15:
622 #line 63 "quote_calc.y"
623 { yyval = regs[yystack.l_mark[0]]; }
624 break;
625 case 17:
626 #line 68 "quote_calc.y"
627 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
628 break;
629 case 18:
630 #line 70 "quote_calc.y"
631 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
632 break;
633 #line 634 "quote_calc.tab.c"
634 }
635 yystack.s_mark -= yym;
636 yystate = *yystack.s_mark;
637 yystack.l_mark -= yym;
638 yym = yylhs[yyn];
639 if (yystate == 0 && yym == 0)
640 {
641 #if YYDEBUG
642 if (yydebug)
643 printf("%sdebug: after reduction, shifting from state 0 to\
644 state %d\n", YYPREFIX, YYFINAL);
645 #endif
646 yystate = YYFINAL;
647 *++yystack.s_mark = YYFINAL;
648 *++yystack.l_mark = yyval;
649 if (yychar < 0)
650 {
651 yychar = YYLEX;
652 if (yychar < 0) yychar = YYEOF;
653 #if YYDEBUG
654 if (yydebug)
655 {
656 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
657 printf("%sdebug: state %d, reading %d (%s)\n",
658 YYPREFIX, YYFINAL, yychar, yys);
659 }
660 #endif
661 }
662 if (yychar == YYEOF) goto yyaccept;
663 goto yyloop;
664 }
665 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
666 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
667 yystate = yytable[yyn];
668 else
669 yystate = yydgoto[yym];
670 #if YYDEBUG
671 if (yydebug)
672 printf("%sdebug: after reduction, shifting from state %d \
673 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
674 #endif
675 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
676 *++yystack.s_mark = (YYINT) yystate;
677 *++yystack.l_mark = yyval;
678 goto yyloop;
679
680 yyoverflow:
681 YYERROR_CALL("yacc stack overflow");
682
683 yyabort:
684 yyfreestack(&yystack);
685 return (1);
686
687 yyaccept:
688 yyfreestack(&yystack);
689 return (0);
690 }
691