1 /* $NetBSD: quote_calc2-s.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-s.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 OP_SUB 259
153 #define OP_MUL 261
154 #define OP_DIV 263
155 #define OP_MOD 265
156 #define OP_AND 267
157 #define DIGIT 269
158 #define LETTER 270
159 #define UMINUS 271
160 #define YYERRCODE 256
161 typedef short YYINT;
162 static const YYINT quote_calc2_lhs[] = { -1,
163 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
164 2, 2, 2, 2, 2, 2, 3, 3,
165 };
166 static const YYINT quote_calc2_len[] = { 2,
167 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
168 3, 3, 3, 2, 1, 1, 1, 2,
169 };
170 static const YYINT quote_calc2_defred[] = { 1,
171 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
172 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
173 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
174 0, 0,
175 };
176 static const YYINT quote_calc2_dgoto[] = { 1,
177 7, 8, 9,
178 };
179 static const YYINT quote_calc2_sindex[] = { 0,
180 -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
181 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
182 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
183 -121, -243,
184 };
185 static const YYINT quote_calc2_rindex[] = { 0,
186 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
187 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
188 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
189 3, -4,
190 };
191 static const YYINT quote_calc2_gindex[] = { 0,
192 0, 42, 0,
193 };
194 #define YYTABLESIZE 259
195 static const YYINT quote_calc2_table[] = { 16,
196 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
197 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
198 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
199 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
200 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
201 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
202 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
206 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
209 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
210 18, 0, 19, 0, 20, 0, 21, 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, 0, 0, 0,
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
218 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
219 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
220 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
221 15, 16, 15, 16, 15, 16, 15, 16, 15,
222 };
223 static const YYINT quote_calc2_check[] = { 10,
224 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
225 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
226 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
227 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
228 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
229 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
230 19, 20, 21, 22, -1, -1, -1, -1, -1, -1,
231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
233 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
234 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
235 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
237 -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
238 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1,
244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
245 -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
246 -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
247 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
248 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
249 260, 262, 262, 264, 264, 266, 266, 268, 268,
250 };
251 #define YYFINAL 1
252 #ifndef YYDEBUG
253 #define YYDEBUG 0
254 #endif
255 #define YYMAXTOKEN 271
256 #define YYUNDFTOKEN 277
257 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
258 #if YYDEBUG
259 static const char *const quote_calc2_name[] = {
260
261 "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,
262 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,
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,
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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,
268 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
269 "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
270 0,0,"illegal-symbol",
271 };
272 static const char *const quote_calc2_rule[] = {
273 "$accept : list",
274 "list :",
275 "list : list stat '\\n'",
276 "list : list error '\\n'",
277 "stat : expr",
278 "stat : LETTER '=' expr",
279 "expr : '(' expr ')'",
280 "expr : expr \"ADD\" expr",
281 "expr : expr \"SUB\" expr",
282 "expr : expr \"MUL\" expr",
283 "expr : expr \"DIV\" expr",
284 "expr : expr \"MOD\" expr",
285 "expr : expr \"AND\" expr",
286 "expr : expr '|' expr",
287 "expr : \"SUB\" expr",
288 "expr : LETTER",
289 "expr : number",
290 "number : DIGIT",
291 "number : number DIGIT",
292
293 };
294 #endif
295
296 int yydebug;
297 int yynerrs;
298
299 int yyerrflag;
300 int yychar;
301 YYSTYPE yyval;
302 YYSTYPE yylval;
303
304 /* define the initial stack-sizes */
305 #ifdef YYSTACKSIZE
306 #undef YYMAXDEPTH
307 #define YYMAXDEPTH YYSTACKSIZE
308 #else
309 #ifdef YYMAXDEPTH
310 #define YYSTACKSIZE YYMAXDEPTH
311 #else
312 #define YYSTACKSIZE 10000
313 #define YYMAXDEPTH 10000
314 #endif
315 #endif
316
317 #define YYINITSTACKSIZE 200
318
319 typedef struct {
320 unsigned stacksize;
321 YYINT *s_base;
322 YYINT *s_mark;
323 YYINT *s_last;
324 YYSTYPE *l_base;
325 YYSTYPE *l_mark;
326 } YYSTACKDATA;
327 /* variables for the parser stack */
328 static YYSTACKDATA yystack;
329 #line 73 "quote_calc2.y"
330 /* start of programs */
331
332 int
main(void)333 main (void)
334 {
335 while(!feof(stdin)) {
336 yyparse();
337 }
338 return 0;
339 }
340
341 static void
yyerror(const char * s)342 yyerror(const char *s)
343 {
344 fprintf(stderr, "%s\n", s);
345 }
346
347 int
yylex(void)348 yylex(void) {
349 /* lexical analysis routine */
350 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
351 /* return DIGIT for a digit, yylval = 0 through 9 */
352 /* all other characters are returned immediately */
353
354 int c;
355
356 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
357
358 /* c is now nonblank */
359
360 if( islower( c )) {
361 yylval = c - 'a';
362 return ( LETTER );
363 }
364 if( isdigit( c )) {
365 yylval = c - '0';
366 return ( DIGIT );
367 }
368 return( c );
369 }
370 #line 369 "quote_calc2-s.tab.c"
371
372 #if YYDEBUG
373 #include <stdio.h> /* needed for printf */
374 #endif
375
376 #include <stdlib.h> /* needed for malloc, etc */
377 #include <string.h> /* needed for memset */
378
379 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
yygrowstack(YYSTACKDATA * data)380 static int yygrowstack(YYSTACKDATA *data)
381 {
382 int i;
383 unsigned newsize;
384 YYINT *newss;
385 YYSTYPE *newvs;
386
387 if ((newsize = data->stacksize) == 0)
388 newsize = YYINITSTACKSIZE;
389 else if (newsize >= YYMAXDEPTH)
390 return YYENOMEM;
391 else if ((newsize *= 2) > YYMAXDEPTH)
392 newsize = YYMAXDEPTH;
393
394 i = (int) (data->s_mark - data->s_base);
395 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
396 if (newss == 0)
397 return YYENOMEM;
398
399 data->s_base = newss;
400 data->s_mark = newss + i;
401
402 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
403 if (newvs == 0)
404 return YYENOMEM;
405
406 data->l_base = newvs;
407 data->l_mark = newvs + i;
408
409 data->stacksize = newsize;
410 data->s_last = data->s_base + newsize - 1;
411 return 0;
412 }
413
414 #if YYPURE || defined(YY_NO_LEAKS)
yyfreestack(YYSTACKDATA * data)415 static void yyfreestack(YYSTACKDATA *data)
416 {
417 free(data->s_base);
418 free(data->l_base);
419 memset(data, 0, sizeof(*data));
420 }
421 #else
422 #define yyfreestack(data) /* nothing */
423 #endif
424
425 #define YYABORT goto yyabort
426 #define YYREJECT goto yyabort
427 #define YYACCEPT goto yyaccept
428 #define YYERROR goto yyerrlab
429
430 int
YYPARSE_DECL()431 YYPARSE_DECL()
432 {
433 int yym, yyn, yystate;
434 #if YYDEBUG
435 const char *yys;
436
437 if ((yys = getenv("YYDEBUG")) != 0)
438 {
439 yyn = *yys;
440 if (yyn >= '0' && yyn <= '9')
441 yydebug = yyn - '0';
442 }
443 #endif
444
445 yynerrs = 0;
446 yyerrflag = 0;
447 yychar = YYEMPTY;
448 yystate = 0;
449
450 #if YYPURE
451 memset(&yystack, 0, sizeof(yystack));
452 #endif
453
454 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
455 yystack.s_mark = yystack.s_base;
456 yystack.l_mark = yystack.l_base;
457 yystate = 0;
458 *yystack.s_mark = 0;
459
460 yyloop:
461 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
462 if (yychar < 0)
463 {
464 if ((yychar = YYLEX) < 0) yychar = YYEOF;
465 #if YYDEBUG
466 if (yydebug)
467 {
468 yys = yyname[YYTRANSLATE(yychar)];
469 printf("%sdebug: state %d, reading %d (%s)\n",
470 YYPREFIX, yystate, yychar, yys);
471 }
472 #endif
473 }
474 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
475 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
476 {
477 #if YYDEBUG
478 if (yydebug)
479 printf("%sdebug: state %d, shifting to state %d\n",
480 YYPREFIX, yystate, yytable[yyn]);
481 #endif
482 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
483 {
484 goto yyoverflow;
485 }
486 yystate = yytable[yyn];
487 *++yystack.s_mark = yytable[yyn];
488 *++yystack.l_mark = yylval;
489 yychar = YYEMPTY;
490 if (yyerrflag > 0) --yyerrflag;
491 goto yyloop;
492 }
493 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
494 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
495 {
496 yyn = yytable[yyn];
497 goto yyreduce;
498 }
499 if (yyerrflag) goto yyinrecovery;
500
501 YYERROR_CALL("syntax error");
502
503 goto yyerrlab;
504
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]) && (yyn += YYERRCODE) >= 0 &&
515 yyn <= YYTABLESIZE && yycheck[yyn] == 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)
523 {
524 goto yyoverflow;
525 }
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 yys = yyname[YYTRANSLATE(yychar)];
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)
567 yyval = yystack.l_mark[1-yym];
568 else
569 memset(&yyval, 0, sizeof yyval);
570 switch (yyn)
571 {
572 case 3:
573 #line 35 "quote_calc2.y"
574 { yyerrok ; }
575 break;
576 case 4:
577 #line 39 "quote_calc2.y"
578 { printf("%d\n",yystack.l_mark[0]);}
579 break;
580 case 5:
581 #line 41 "quote_calc2.y"
582 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
583 break;
584 case 6:
585 #line 45 "quote_calc2.y"
586 { yyval = yystack.l_mark[-1]; }
587 break;
588 case 7:
589 #line 47 "quote_calc2.y"
590 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
591 break;
592 case 8:
593 #line 49 "quote_calc2.y"
594 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
595 break;
596 case 9:
597 #line 51 "quote_calc2.y"
598 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
599 break;
600 case 10:
601 #line 53 "quote_calc2.y"
602 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
603 break;
604 case 11:
605 #line 55 "quote_calc2.y"
606 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
607 break;
608 case 12:
609 #line 57 "quote_calc2.y"
610 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
611 break;
612 case 13:
613 #line 59 "quote_calc2.y"
614 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
615 break;
616 case 14:
617 #line 61 "quote_calc2.y"
618 { yyval = - yystack.l_mark[0]; }
619 break;
620 case 15:
621 #line 63 "quote_calc2.y"
622 { yyval = regs[yystack.l_mark[0]]; }
623 break;
624 case 17:
625 #line 68 "quote_calc2.y"
626 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
627 break;
628 case 18:
629 #line 70 "quote_calc2.y"
630 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
631 break;
632 #line 631 "quote_calc2-s.tab.c"
633 }
634 yystack.s_mark -= yym;
635 yystate = *yystack.s_mark;
636 yystack.l_mark -= yym;
637 yym = yylhs[yyn];
638 if (yystate == 0 && yym == 0)
639 {
640 #if YYDEBUG
641 if (yydebug)
642 printf("%sdebug: after reduction, shifting from state 0 to\
643 state %d\n", YYPREFIX, YYFINAL);
644 #endif
645 yystate = YYFINAL;
646 *++yystack.s_mark = YYFINAL;
647 *++yystack.l_mark = yyval;
648 if (yychar < 0)
649 {
650 if ((yychar = YYLEX) < 0) yychar = YYEOF;
651 #if YYDEBUG
652 if (yydebug)
653 {
654 yys = yyname[YYTRANSLATE(yychar)];
655 printf("%sdebug: state %d, reading %d (%s)\n",
656 YYPREFIX, YYFINAL, yychar, yys);
657 }
658 #endif
659 }
660 if (yychar == YYEOF) goto yyaccept;
661 goto yyloop;
662 }
663 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
664 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
665 yystate = yytable[yyn];
666 else
667 yystate = yydgoto[yym];
668 #if YYDEBUG
669 if (yydebug)
670 printf("%sdebug: after reduction, shifting from state %d \
671 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
672 #endif
673 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
674 {
675 goto yyoverflow;
676 }
677 *++yystack.s_mark = (YYINT) yystate;
678 *++yystack.l_mark = yyval;
679 goto yyloop;
680
681 yyoverflow:
682 YYERROR_CALL("yacc stack overflow");
683
684 yyabort:
685 yyfreestack(&yystack);
686 return (1);
687
688 yyaccept:
689 yyfreestack(&yystack);
690 return (0);
691 }
692