1 /* $NetBSD: quote_calc2.tab.c,v 1.1.1.1 2015/01/03 22:58:24 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 1
9 #define YYMINOR 9
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_calc2_parse
21 #endif /* yyparse */
22
23 #ifndef yylex
24 #define yylex quote_calc2_lex
25 #endif /* yylex */
26
27 #ifndef yyerror
28 #define yyerror quote_calc2_error
29 #endif /* yyerror */
30
31 #ifndef yychar
32 #define yychar quote_calc2_char
33 #endif /* yychar */
34
35 #ifndef yyval
36 #define yyval quote_calc2_val
37 #endif /* yyval */
38
39 #ifndef yylval
40 #define yylval quote_calc2_lval
41 #endif /* yylval */
42
43 #ifndef yydebug
44 #define yydebug quote_calc2_debug
45 #endif /* yydebug */
46
47 #ifndef yynerrs
48 #define yynerrs quote_calc2_nerrs
49 #endif /* yynerrs */
50
51 #ifndef yyerrflag
52 #define yyerrflag quote_calc2_errflag
53 #endif /* yyerrflag */
54
55 #ifndef yylhs
56 #define yylhs quote_calc2_lhs
57 #endif /* yylhs */
58
59 #ifndef yylen
60 #define yylen quote_calc2_len
61 #endif /* yylen */
62
63 #ifndef yydefred
64 #define yydefred quote_calc2_defred
65 #endif /* yydefred */
66
67 #ifndef yydgoto
68 #define yydgoto quote_calc2_dgoto
69 #endif /* yydgoto */
70
71 #ifndef yysindex
72 #define yysindex quote_calc2_sindex
73 #endif /* yysindex */
74
75 #ifndef yyrindex
76 #define yyrindex quote_calc2_rindex
77 #endif /* yyrindex */
78
79 #ifndef yygindex
80 #define yygindex quote_calc2_gindex
81 #endif /* yygindex */
82
83 #ifndef yytable
84 #define yytable quote_calc2_table
85 #endif /* yytable */
86
87 #ifndef yycheck
88 #define yycheck quote_calc2_check
89 #endif /* yycheck */
90
91 #ifndef yyname
92 #define yyname quote_calc2_name
93 #endif /* yyname */
94
95 #ifndef yyrule
96 #define yyrule quote_calc2_rule
97 #endif /* yyrule */
98 #define YYPREFIX "quote_calc2_"
99
100 #define YYPURE 0
101
102 #line 2 "quote_calc2.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_calc2.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 short YYINT;
168 static const YYINT quote_calc2_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_calc2_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_calc2_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_calc2_dgoto[] = { 1,
183 7, 8, 9,
184 };
185 static const YYINT quote_calc2_sindex[] = { 0,
186 -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
187 0, -243, -36, -23, 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_calc2_rindex[] = { 0,
192 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
193 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
194 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
195 3, -4,
196 };
197 static const YYINT quote_calc2_gindex[] = { 0,
198 0, 42, 0,
199 };
200 #define YYTABLESIZE 259
201 static const YYINT quote_calc2_table[] = { 16,
202 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
203 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
204 19, 4, 20, 5, 21, 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 22, 0, 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, 0, 16, 0, 17, 0,
216 18, 0, 19, 0, 20, 0, 21, 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 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
225 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
226 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
227 15, 16, 15, 16, 15, 16, 15, 16, 15,
228 };
229 static const YYINT quote_calc2_check[] = { 10,
230 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
231 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
232 264, 10, 266, 10, 268, -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 124, -1, -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, -1, 258, -1, 260, -1,
244 262, -1, 264, -1, 266, -1, 268, -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 -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
253 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
254 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
255 260, 262, 262, 264, 264, 266, 266, 268, 268,
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_calc2_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_calc2_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 \"ADD\" expr",
287 "expr : expr \"SUB\" expr",
288 "expr : expr \"MUL\" expr",
289 "expr : expr \"DIV\" expr",
290 "expr : expr \"MOD\" expr",
291 "expr : expr \"AND\" expr",
292 "expr : expr '|' expr",
293 "expr : \"SUB\" expr",
294 "expr : LETTER",
295 "expr : number",
296 "number : DIGIT",
297 "number : number DIGIT",
298
299 };
300 #endif
301
302 int yydebug;
303 int yynerrs;
304
305 int yyerrflag;
306 int yychar;
307 YYSTYPE yyval;
308 YYSTYPE yylval;
309
310 /* define the initial stack-sizes */
311 #ifdef YYSTACKSIZE
312 #undef YYMAXDEPTH
313 #define YYMAXDEPTH YYSTACKSIZE
314 #else
315 #ifdef YYMAXDEPTH
316 #define YYSTACKSIZE YYMAXDEPTH
317 #else
318 #define YYSTACKSIZE 10000
319 #define YYMAXDEPTH 10000
320 #endif
321 #endif
322
323 #define YYINITSTACKSIZE 200
324
325 typedef struct {
326 unsigned stacksize;
327 YYINT *s_base;
328 YYINT *s_mark;
329 YYINT *s_last;
330 YYSTYPE *l_base;
331 YYSTYPE *l_mark;
332 } YYSTACKDATA;
333 /* variables for the parser stack */
334 static YYSTACKDATA yystack;
335 #line 73 "quote_calc2.y"
336 /* start of programs */
337
338 int
main(void)339 main (void)
340 {
341 while(!feof(stdin)) {
342 yyparse();
343 }
344 return 0;
345 }
346
347 static void
yyerror(const char * s)348 yyerror(const char *s)
349 {
350 fprintf(stderr, "%s\n", s);
351 }
352
353 int
yylex(void)354 yylex(void) {
355 /* lexical analysis routine */
356 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
357 /* return DIGIT for a digit, yylval = 0 through 9 */
358 /* all other characters are returned immediately */
359
360 int c;
361
362 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
363
364 /* c is now nonblank */
365
366 if( islower( c )) {
367 yylval = c - 'a';
368 return ( LETTER );
369 }
370 if( isdigit( c )) {
371 yylval = c - '0';
372 return ( DIGIT );
373 }
374 return( c );
375 }
376 #line 375 "quote_calc2.tab.c"
377
378 #if YYDEBUG
379 #include <stdio.h> /* needed for printf */
380 #endif
381
382 #include <stdlib.h> /* needed for malloc, etc */
383 #include <string.h> /* needed for memset */
384
385 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
yygrowstack(YYSTACKDATA * data)386 static int yygrowstack(YYSTACKDATA *data)
387 {
388 int i;
389 unsigned newsize;
390 YYINT *newss;
391 YYSTYPE *newvs;
392
393 if ((newsize = data->stacksize) == 0)
394 newsize = YYINITSTACKSIZE;
395 else if (newsize >= YYMAXDEPTH)
396 return YYENOMEM;
397 else if ((newsize *= 2) > YYMAXDEPTH)
398 newsize = YYMAXDEPTH;
399
400 i = (int) (data->s_mark - data->s_base);
401 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
402 if (newss == 0)
403 return YYENOMEM;
404
405 data->s_base = newss;
406 data->s_mark = newss + i;
407
408 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
409 if (newvs == 0)
410 return YYENOMEM;
411
412 data->l_base = newvs;
413 data->l_mark = newvs + i;
414
415 data->stacksize = newsize;
416 data->s_last = data->s_base + newsize - 1;
417 return 0;
418 }
419
420 #if YYPURE || defined(YY_NO_LEAKS)
yyfreestack(YYSTACKDATA * data)421 static void yyfreestack(YYSTACKDATA *data)
422 {
423 free(data->s_base);
424 free(data->l_base);
425 memset(data, 0, sizeof(*data));
426 }
427 #else
428 #define yyfreestack(data) /* nothing */
429 #endif
430
431 #define YYABORT goto yyabort
432 #define YYREJECT goto yyabort
433 #define YYACCEPT goto yyaccept
434 #define YYERROR goto yyerrlab
435
436 int
YYPARSE_DECL()437 YYPARSE_DECL()
438 {
439 int yym, yyn, yystate;
440 #if YYDEBUG
441 const char *yys;
442
443 if ((yys = getenv("YYDEBUG")) != 0)
444 {
445 yyn = *yys;
446 if (yyn >= '0' && yyn <= '9')
447 yydebug = yyn - '0';
448 }
449 #endif
450
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 if ((yychar = YYLEX) < 0) yychar = YYEOF;
471 #if YYDEBUG
472 if (yydebug)
473 {
474 yys = yyname[YYTRANSLATE(yychar)];
475 printf("%sdebug: state %d, reading %d (%s)\n",
476 YYPREFIX, yystate, yychar, yys);
477 }
478 #endif
479 }
480 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
481 yyn <= YYTABLESIZE && yycheck[yyn] == 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)
489 {
490 goto yyoverflow;
491 }
492 yystate = yytable[yyn];
493 *++yystack.s_mark = yytable[yyn];
494 *++yystack.l_mark = yylval;
495 yychar = YYEMPTY;
496 if (yyerrflag > 0) --yyerrflag;
497 goto yyloop;
498 }
499 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
500 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
501 {
502 yyn = yytable[yyn];
503 goto yyreduce;
504 }
505 if (yyerrflag) goto yyinrecovery;
506
507 YYERROR_CALL("syntax error");
508
509 goto yyerrlab;
510
511 yyerrlab:
512 ++yynerrs;
513
514 yyinrecovery:
515 if (yyerrflag < 3)
516 {
517 yyerrflag = 3;
518 for (;;)
519 {
520 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
521 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
522 {
523 #if YYDEBUG
524 if (yydebug)
525 printf("%sdebug: state %d, error recovery shifting\
526 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
527 #endif
528 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
529 {
530 goto yyoverflow;
531 }
532 yystate = yytable[yyn];
533 *++yystack.s_mark = yytable[yyn];
534 *++yystack.l_mark = yylval;
535 goto yyloop;
536 }
537 else
538 {
539 #if YYDEBUG
540 if (yydebug)
541 printf("%sdebug: error recovery discarding state %d\n",
542 YYPREFIX, *yystack.s_mark);
543 #endif
544 if (yystack.s_mark <= yystack.s_base) goto yyabort;
545 --yystack.s_mark;
546 --yystack.l_mark;
547 }
548 }
549 }
550 else
551 {
552 if (yychar == YYEOF) goto yyabort;
553 #if YYDEBUG
554 if (yydebug)
555 {
556 yys = yyname[YYTRANSLATE(yychar)];
557 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
558 YYPREFIX, yystate, yychar, yys);
559 }
560 #endif
561 yychar = YYEMPTY;
562 goto yyloop;
563 }
564
565 yyreduce:
566 #if YYDEBUG
567 if (yydebug)
568 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
569 YYPREFIX, yystate, yyn, yyrule[yyn]);
570 #endif
571 yym = yylen[yyn];
572 if (yym)
573 yyval = yystack.l_mark[1-yym];
574 else
575 memset(&yyval, 0, sizeof yyval);
576 switch (yyn)
577 {
578 case 3:
579 #line 35 "quote_calc2.y"
580 { yyerrok ; }
581 break;
582 case 4:
583 #line 39 "quote_calc2.y"
584 { printf("%d\n",yystack.l_mark[0]);}
585 break;
586 case 5:
587 #line 41 "quote_calc2.y"
588 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
589 break;
590 case 6:
591 #line 45 "quote_calc2.y"
592 { yyval = yystack.l_mark[-1]; }
593 break;
594 case 7:
595 #line 47 "quote_calc2.y"
596 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
597 break;
598 case 8:
599 #line 49 "quote_calc2.y"
600 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
601 break;
602 case 9:
603 #line 51 "quote_calc2.y"
604 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
605 break;
606 case 10:
607 #line 53 "quote_calc2.y"
608 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
609 break;
610 case 11:
611 #line 55 "quote_calc2.y"
612 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
613 break;
614 case 12:
615 #line 57 "quote_calc2.y"
616 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
617 break;
618 case 13:
619 #line 59 "quote_calc2.y"
620 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
621 break;
622 case 14:
623 #line 61 "quote_calc2.y"
624 { yyval = - yystack.l_mark[0]; }
625 break;
626 case 15:
627 #line 63 "quote_calc2.y"
628 { yyval = regs[yystack.l_mark[0]]; }
629 break;
630 case 17:
631 #line 68 "quote_calc2.y"
632 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
633 break;
634 case 18:
635 #line 70 "quote_calc2.y"
636 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
637 break;
638 #line 637 "quote_calc2.tab.c"
639 }
640 yystack.s_mark -= yym;
641 yystate = *yystack.s_mark;
642 yystack.l_mark -= yym;
643 yym = yylhs[yyn];
644 if (yystate == 0 && yym == 0)
645 {
646 #if YYDEBUG
647 if (yydebug)
648 printf("%sdebug: after reduction, shifting from state 0 to\
649 state %d\n", YYPREFIX, YYFINAL);
650 #endif
651 yystate = YYFINAL;
652 *++yystack.s_mark = YYFINAL;
653 *++yystack.l_mark = yyval;
654 if (yychar < 0)
655 {
656 if ((yychar = YYLEX) < 0) yychar = YYEOF;
657 #if YYDEBUG
658 if (yydebug)
659 {
660 yys = yyname[YYTRANSLATE(yychar)];
661 printf("%sdebug: state %d, reading %d (%s)\n",
662 YYPREFIX, YYFINAL, yychar, yys);
663 }
664 #endif
665 }
666 if (yychar == YYEOF) goto yyaccept;
667 goto yyloop;
668 }
669 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
670 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
671 yystate = yytable[yyn];
672 else
673 yystate = yydgoto[yym];
674 #if YYDEBUG
675 if (yydebug)
676 printf("%sdebug: after reduction, shifting from state %d \
677 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
678 #endif
679 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
680 {
681 goto yyoverflow;
682 }
683 *++yystack.s_mark = (YYINT) yystate;
684 *++yystack.l_mark = yyval;
685 goto yyloop;
686
687 yyoverflow:
688 YYERROR_CALL("yacc stack overflow");
689
690 yyabort:
691 yyfreestack(&yystack);
692 return (1);
693
694 yyaccept:
695 yyfreestack(&yystack);
696 return (0);
697 }
698