calc2.tab.c revision 1.5 1 /* $NetBSD: calc2.tab.c,v 1.5 2024/09/14 21:29:04 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 2
9 #define YYMINOR 0
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 calc2_parse
21 #endif /* yyparse */
22
23 #ifndef yylex
24 #define yylex calc2_lex
25 #endif /* yylex */
26
27 #ifndef yyerror
28 #define yyerror calc2_error
29 #endif /* yyerror */
30
31 #ifndef yychar
32 #define yychar calc2_char
33 #endif /* yychar */
34
35 #ifndef yyval
36 #define yyval calc2_val
37 #endif /* yyval */
38
39 #ifndef yylval
40 #define yylval calc2_lval
41 #endif /* yylval */
42
43 #ifndef yydebug
44 #define yydebug calc2_debug
45 #endif /* yydebug */
46
47 #ifndef yynerrs
48 #define yynerrs calc2_nerrs
49 #endif /* yynerrs */
50
51 #ifndef yyerrflag
52 #define yyerrflag calc2_errflag
53 #endif /* yyerrflag */
54
55 #ifndef yylhs
56 #define yylhs calc2_lhs
57 #endif /* yylhs */
58
59 #ifndef yylen
60 #define yylen calc2_len
61 #endif /* yylen */
62
63 #ifndef yydefred
64 #define yydefred calc2_defred
65 #endif /* yydefred */
66
67 #ifndef yydgoto
68 #define yydgoto calc2_dgoto
69 #endif /* yydgoto */
70
71 #ifndef yysindex
72 #define yysindex calc2_sindex
73 #endif /* yysindex */
74
75 #ifndef yyrindex
76 #define yyrindex calc2_rindex
77 #endif /* yyrindex */
78
79 #ifndef yygindex
80 #define yygindex calc2_gindex
81 #endif /* yygindex */
82
83 #ifndef yytable
84 #define yytable calc2_table
85 #endif /* yytable */
86
87 #ifndef yycheck
88 #define yycheck calc2_check
89 #endif /* yycheck */
90
91 #ifndef yyname
92 #define yyname calc2_name
93 #endif /* yyname */
94
95 #ifndef yyrule
96 #define yyrule calc2_rule
97 #endif /* yyrule */
98 #define YYPREFIX "calc2_"
99
100 #define YYPURE 0
101
102 #line 7 "calc2.y"
103 # include <stdio.h>
104 # include <ctype.h>
105
106 #ifdef YYBISON
107 #define YYLEX_PARAM base
108 #define YYLEX_DECL() yylex(int *YYLEX_PARAM)
109 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
110 int YYLEX_DECL();
111 static void YYERROR_DECL();
112 #endif
113
114 #line 113 "calc2.tab.c"
115
116 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
117 /* Default: YYSTYPE is the semantic value type. */
118 typedef int YYSTYPE;
119 # define YYSTYPE_IS_DECLARED 1
120 #endif
121
122 /* compatibility with bison */
123 #ifdef YYPARSE_PARAM
124 /* compatibility with FreeBSD */
125 # ifdef YYPARSE_PARAM_TYPE
126 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
127 # else
128 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
129 # endif
130 #else
131 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
132 #endif
133
134 /* Parameters sent to lex. */
135 #ifdef YYLEX_PARAM
136 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
137 # define YYLEX yylex(YYLEX_PARAM)
138 #else
139 # define YYLEX_DECL() yylex(int *base)
140 # define YYLEX yylex(base)
141 #endif
142
143 /* Parameters sent to yyerror. */
144 #ifndef YYERROR_DECL
145 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
146 #endif
147 #ifndef YYERROR_CALL
148 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
149 #endif
150
151 extern int YYPARSE_DECL();
152
153 #define DIGIT 257
154 #define LETTER 258
155 #define UMINUS 259
156 #define YYERRCODE 256
157 typedef int YYINT;
158 static const YYINT calc2_lhs[] = { -1,
159 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
160 2, 2, 2, 2, 2, 2, 3, 3,
161 };
162 static const YYINT calc2_len[] = { 2,
163 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
164 3, 3, 3, 2, 1, 1, 1, 2,
165 };
166 static const YYINT calc2_defred[] = { 1,
167 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
168 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
169 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
170 10, 11,
171 };
172 static const YYINT calc2_dgoto[] = { 1,
173 7, 8, 9,
174 };
175 static const YYINT calc2_sindex[] = { 0,
176 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
177 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
178 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
179 0, 0,
180 };
181 static const YYINT calc2_rindex[] = { 0,
182 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
183 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
185 0, 0,
186 };
187 static const YYINT calc2_gindex[] = { 0,
188 0, 65, 0,
189 };
190 #define YYTABLESIZE 220
191 static const YYINT calc2_table[] = { 6,
192 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
193 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
194 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
195 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
196 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
197 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
198 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
199 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
200 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
201 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
202 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
203 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
204 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
205 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
206 0, 0, 0, 0, 0, 16, 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, 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, 2, 3, 4, 3, 12,
214 };
215 static const YYINT calc2_check[] = { 40,
216 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
217 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
218 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
219 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
220 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
221 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
222 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
223 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
224 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
225 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
226 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
227 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
228 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
229 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
230 -1, -1, -1, -1, -1, 124, -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 -1, -1, -1, -1, -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, 256, 257, 258, 257, 258,
238 };
239 #define YYFINAL 1
240 #ifndef YYDEBUG
241 #define YYDEBUG 0
242 #endif
243 #define YYMAXTOKEN 259
244 #define YYUNDFTOKEN 265
245 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
246 #if YYDEBUG
247 static const char *const calc2_name[] = {
248
249 "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,
250 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
251 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
252 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
253 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
254 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
255 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
256 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
257 };
258 static const char *const calc2_rule[] = {
259 "$accept : list",
260 "list :",
261 "list : list stat '\\n'",
262 "list : list error '\\n'",
263 "stat : expr",
264 "stat : LETTER '=' expr",
265 "expr : '(' expr ')'",
266 "expr : expr '+' expr",
267 "expr : expr '-' expr",
268 "expr : expr '*' expr",
269 "expr : expr '/' expr",
270 "expr : expr '%' expr",
271 "expr : expr '&' expr",
272 "expr : expr '|' expr",
273 "expr : '-' expr",
274 "expr : LETTER",
275 "expr : number",
276 "number : DIGIT",
277 "number : number DIGIT",
278
279 };
280 #endif
281
282 #if YYDEBUG
283 int yydebug;
284 #endif
285
286 int yyerrflag;
287 int yychar;
288 YYSTYPE yyval;
289 YYSTYPE yylval;
290 int yynerrs;
291
292 /* define the initial stack-sizes */
293 #ifdef YYSTACKSIZE
294 #undef YYMAXDEPTH
295 #define YYMAXDEPTH YYSTACKSIZE
296 #else
297 #ifdef YYMAXDEPTH
298 #define YYSTACKSIZE YYMAXDEPTH
299 #else
300 #define YYSTACKSIZE 10000
301 #define YYMAXDEPTH 10000
302 #endif
303 #endif
304
305 #define YYINITSTACKSIZE 200
306
307 typedef struct {
308 unsigned stacksize;
309 YYINT *s_base;
310 YYINT *s_mark;
311 YYINT *s_last;
312 YYSTYPE *l_base;
313 YYSTYPE *l_mark;
314 } YYSTACKDATA;
315 /* variables for the parser stack */
316 static YYSTACKDATA yystack;
317 #line 73 "calc2.y"
318 /* start of programs */
319
320 #ifdef YYBYACC
321 extern int YYLEX_DECL();
322 #endif
323
324 int
325 main (void)
326 {
327 int regs[26];
328 int base = 10;
329
330 while(!feof(stdin)) {
331 yyparse(regs, &base);
332 }
333 return 0;
334 }
335
336 #define UNUSED(x) ((void)(x))
337
338 static void
339 YYERROR_DECL()
340 {
341 UNUSED(regs); /* %parse-param regs is not actually used here */
342 UNUSED(base); /* %parse-param base is not actually used here */
343 fprintf(stderr, "%s\n", s);
344 }
345
346 int
347 YYLEX_DECL()
348 {
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') % (*base);
366 return ( DIGIT );
367 }
368 return( c );
369 }
370 #line 369 "calc2.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 */
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)
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
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 /* yym is set below */
446 /* yyn is set below */
447 yynerrs = 0;
448 yyerrflag = 0;
449 yychar = YYEMPTY;
450 yystate = 0;
451
452 #if YYPURE
453 memset(&yystack, 0, sizeof(yystack));
454 #endif
455
456 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
457 yystack.s_mark = yystack.s_base;
458 yystack.l_mark = yystack.l_base;
459 yystate = 0;
460 *yystack.s_mark = 0;
461
462 yyloop:
463 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
464 if (yychar < 0)
465 {
466 yychar = YYLEX;
467 if (yychar < 0) yychar = YYEOF;
468 #if YYDEBUG
469 if (yydebug)
470 {
471 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
472 printf("%sdebug: state %d, reading %d (%s)\n",
473 YYPREFIX, yystate, yychar, yys);
474 }
475 #endif
476 }
477 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
478 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
479 {
480 #if YYDEBUG
481 if (yydebug)
482 printf("%sdebug: state %d, shifting to state %d\n",
483 YYPREFIX, yystate, yytable[yyn]);
484 #endif
485 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
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]) != 0) && (yyn += yychar) >= 0 &&
494 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
495 {
496 yyn = yytable[yyn];
497 goto yyreduce;
498 }
499 if (yyerrflag != 0) goto yyinrecovery;
500
501 YYERROR_CALL("syntax error");
502
503 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
504 yyerrlab:
505 ++yynerrs;
506
507 yyinrecovery:
508 if (yyerrflag < 3)
509 {
510 yyerrflag = 3;
511 for (;;)
512 {
513 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
514 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
515 {
516 #if YYDEBUG
517 if (yydebug)
518 printf("%sdebug: state %d, error recovery shifting\
519 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
520 #endif
521 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
522 yystate = yytable[yyn];
523 *++yystack.s_mark = yytable[yyn];
524 *++yystack.l_mark = yylval;
525 goto yyloop;
526 }
527 else
528 {
529 #if YYDEBUG
530 if (yydebug)
531 printf("%sdebug: error recovery discarding state %d\n",
532 YYPREFIX, *yystack.s_mark);
533 #endif
534 if (yystack.s_mark <= yystack.s_base) goto yyabort;
535 --yystack.s_mark;
536 --yystack.l_mark;
537 }
538 }
539 }
540 else
541 {
542 if (yychar == YYEOF) goto yyabort;
543 #if YYDEBUG
544 if (yydebug)
545 {
546 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
547 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
548 YYPREFIX, yystate, yychar, yys);
549 }
550 #endif
551 yychar = YYEMPTY;
552 goto yyloop;
553 }
554
555 yyreduce:
556 #if YYDEBUG
557 if (yydebug)
558 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
559 YYPREFIX, yystate, yyn, yyrule[yyn]);
560 #endif
561 yym = yylen[yyn];
562 if (yym > 0)
563 yyval = yystack.l_mark[1-yym];
564 else
565 memset(&yyval, 0, sizeof yyval);
566
567 switch (yyn)
568 {
569 case 3:
570 #line 35 "calc2.y"
571 { yyerrok ; }
572 #line 571 "calc2.tab.c"
573 break;
574 case 4:
575 #line 39 "calc2.y"
576 { printf("%d\n",yystack.l_mark[0]);}
577 #line 576 "calc2.tab.c"
578 break;
579 case 5:
580 #line 41 "calc2.y"
581 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
582 #line 581 "calc2.tab.c"
583 break;
584 case 6:
585 #line 45 "calc2.y"
586 { yyval = yystack.l_mark[-1]; }
587 #line 586 "calc2.tab.c"
588 break;
589 case 7:
590 #line 47 "calc2.y"
591 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
592 #line 591 "calc2.tab.c"
593 break;
594 case 8:
595 #line 49 "calc2.y"
596 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
597 #line 596 "calc2.tab.c"
598 break;
599 case 9:
600 #line 51 "calc2.y"
601 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
602 #line 601 "calc2.tab.c"
603 break;
604 case 10:
605 #line 53 "calc2.y"
606 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
607 #line 606 "calc2.tab.c"
608 break;
609 case 11:
610 #line 55 "calc2.y"
611 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
612 #line 611 "calc2.tab.c"
613 break;
614 case 12:
615 #line 57 "calc2.y"
616 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
617 #line 616 "calc2.tab.c"
618 break;
619 case 13:
620 #line 59 "calc2.y"
621 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
622 #line 621 "calc2.tab.c"
623 break;
624 case 14:
625 #line 61 "calc2.y"
626 { yyval = - yystack.l_mark[0]; }
627 #line 626 "calc2.tab.c"
628 break;
629 case 15:
630 #line 63 "calc2.y"
631 { yyval = regs[yystack.l_mark[0]]; }
632 #line 631 "calc2.tab.c"
633 break;
634 case 17:
635 #line 68 "calc2.y"
636 { yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
637 #line 636 "calc2.tab.c"
638 break;
639 case 18:
640 #line 70 "calc2.y"
641 { yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
642 #line 641 "calc2.tab.c"
643 break;
644 #line 643 "calc2.tab.c"
645 }
646 yystack.s_mark -= yym;
647 yystate = *yystack.s_mark;
648 yystack.l_mark -= yym;
649 yym = yylhs[yyn];
650 if (yystate == 0 && yym == 0)
651 {
652 #if YYDEBUG
653 if (yydebug)
654 printf("%sdebug: after reduction, shifting from state 0 to\
655 state %d\n", YYPREFIX, YYFINAL);
656 #endif
657 yystate = YYFINAL;
658 *++yystack.s_mark = YYFINAL;
659 *++yystack.l_mark = yyval;
660 if (yychar < 0)
661 {
662 yychar = YYLEX;
663 if (yychar < 0) yychar = YYEOF;
664 #if YYDEBUG
665 if (yydebug)
666 {
667 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
668 printf("%sdebug: state %d, reading %d (%s)\n",
669 YYPREFIX, YYFINAL, yychar, yys);
670 }
671 #endif
672 }
673 if (yychar == YYEOF) goto yyaccept;
674 goto yyloop;
675 }
676 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
677 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
678 yystate = yytable[yyn];
679 else
680 yystate = yydgoto[yym];
681 #if YYDEBUG
682 if (yydebug)
683 printf("%sdebug: after reduction, shifting from state %d \
684 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
685 #endif
686 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
687 *++yystack.s_mark = (YYINT) yystate;
688 *++yystack.l_mark = yyval;
689 goto yyloop;
690
691 yyoverflow:
692 YYERROR_CALL("yacc stack overflow");
693
694 yyabort:
695 yyfreestack(&yystack);
696 return (1);
697
698 yyaccept:
699 yyfreestack(&yystack);
700 return (0);
701 }
702