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 calc_code_imports_parse
19 #endif /* yyparse */
20
21 #ifndef yylex
22 #define yylex calc_code_imports_lex
23 #endif /* yylex */
24
25 #ifndef yyerror
26 #define yyerror calc_code_imports_error
27 #endif /* yyerror */
28
29 #ifndef yychar
30 #define yychar calc_code_imports_char
31 #endif /* yychar */
32
33 #ifndef yyval
34 #define yyval calc_code_imports_val
35 #endif /* yyval */
36
37 #ifndef yylval
38 #define yylval calc_code_imports_lval
39 #endif /* yylval */
40
41 #ifndef yydebug
42 #define yydebug calc_code_imports_debug
43 #endif /* yydebug */
44
45 #ifndef yynerrs
46 #define yynerrs calc_code_imports_nerrs
47 #endif /* yynerrs */
48
49 #ifndef yyerrflag
50 #define yyerrflag calc_code_imports_errflag
51 #endif /* yyerrflag */
52
53 #ifndef yylhs
54 #define yylhs calc_code_imports_lhs
55 #endif /* yylhs */
56
57 #ifndef yylen
58 #define yylen calc_code_imports_len
59 #endif /* yylen */
60
61 #ifndef yydefred
62 #define yydefred calc_code_imports_defred
63 #endif /* yydefred */
64
65 #ifndef yydgoto
66 #define yydgoto calc_code_imports_dgoto
67 #endif /* yydgoto */
68
69 #ifndef yysindex
70 #define yysindex calc_code_imports_sindex
71 #endif /* yysindex */
72
73 #ifndef yyrindex
74 #define yyrindex calc_code_imports_rindex
75 #endif /* yyrindex */
76
77 #ifndef yygindex
78 #define yygindex calc_code_imports_gindex
79 #endif /* yygindex */
80
81 #ifndef yytable
82 #define yytable calc_code_imports_table
83 #endif /* yytable */
84
85 #ifndef yycheck
86 #define yycheck calc_code_imports_check
87 #endif /* yycheck */
88
89 #ifndef yyname
90 #define yyname calc_code_imports_name
91 #endif /* yyname */
92
93 #ifndef yyrule
94 #define yyrule calc_code_imports_rule
95 #endif /* yyrule */
96 #define YYPREFIX "calc_code_imports_"
97
98 #define YYPURE 0
99
100 #line 5 "calc_code_imports.y"
101 # include <stdio.h>
102 # include <ctype.h>
103
104 int regs[26];
105 int base;
106
107 extern int yylex(void);
108 static void yyerror(const char *s);
109
110 #line 111 "calc_code_imports.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 DIGIT 257
150 #define LETTER 258
151 #define UMINUS 259
152 #define YYERRCODE 256
153 typedef int YYINT;
154 static const YYINT calc_code_imports_lhs[] = { -1,
155 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
156 2, 2, 2, 2, 2, 2, 3, 3,
157 };
158 static const YYINT calc_code_imports_len[] = { 2,
159 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
160 3, 3, 3, 2, 1, 1, 1, 2,
161 };
162 static const YYINT calc_code_imports_defred[] = { 1,
163 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
164 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
165 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
166 10, 11,
167 };
168 static const YYINT calc_code_imports_dgoto[] = { 1,
169 7, 8, 9,
170 };
171 static const YYINT calc_code_imports_sindex[] = { 0,
172 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
173 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
174 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
175 0, 0,
176 };
177 static const YYINT calc_code_imports_rindex[] = { 0,
178 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
181 0, 0,
182 };
183 static const YYINT calc_code_imports_gindex[] = { 0,
184 0, 65, 0,
185 };
186 #define YYTABLESIZE 220
187 static const YYINT calc_code_imports_table[] = { 6,
188 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
189 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
190 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
191 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
192 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
193 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
194 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
195 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
196 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
197 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
198 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
199 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
200 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
201 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
202 0, 0, 0, 0, 0, 16, 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 0, 0, 0, 0, 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, 2, 3, 4, 3, 12,
210 };
211 static const YYINT calc_code_imports_check[] = { 40,
212 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
213 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
214 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
215 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
216 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
217 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
218 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
219 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
220 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
221 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
222 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
223 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
224 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
225 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
226 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
227 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
228 -1, -1, -1, -1, -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 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
233 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
234 };
235 #define YYFINAL 1
236 #ifndef YYDEBUG
237 #define YYDEBUG 0
238 #endif
239 #define YYMAXTOKEN 259
240 #define YYUNDFTOKEN 265
241 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
242 #if YYDEBUG
243 static const char *const calc_code_imports_name[] = {
244
245 "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,
246 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
247 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
248 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
249 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,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,0,0,0,
252 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
253 };
254 static const char *const calc_code_imports_rule[] = {
255 "$accept : list",
256 "list :",
257 "list : list stat '\\n'",
258 "list : list error '\\n'",
259 "stat : expr",
260 "stat : LETTER '=' expr",
261 "expr : '(' expr ')'",
262 "expr : expr '+' expr",
263 "expr : expr '-' expr",
264 "expr : expr '*' expr",
265 "expr : expr '/' expr",
266 "expr : expr '%' expr",
267 "expr : expr '&' expr",
268 "expr : expr '|' expr",
269 "expr : '-' expr",
270 "expr : LETTER",
271 "expr : number",
272 "number : DIGIT",
273 "number : number DIGIT",
274
275 };
276 #endif
277
278 #if YYDEBUG
279 int yydebug;
280 #endif
281
282 int yyerrflag;
283 int yychar;
284 YYSTYPE yyval;
285 YYSTYPE yylval;
286 int yynerrs;
287
288 /* define the initial stack-sizes */
289 #ifdef YYSTACKSIZE
290 #undef YYMAXDEPTH
291 #define YYMAXDEPTH YYSTACKSIZE
292 #else
293 #ifdef YYMAXDEPTH
294 #define YYSTACKSIZE YYMAXDEPTH
295 #else
296 #define YYSTACKSIZE 10000
297 #define YYMAXDEPTH 10000
298 #endif
299 #endif
300
301 #define YYINITSTACKSIZE 200
302
303 typedef struct {
304 unsigned stacksize;
305 YYINT *s_base;
306 YYINT *s_mark;
307 YYINT *s_last;
308 YYSTYPE *l_base;
309 YYSTYPE *l_mark;
310 } YYSTACKDATA;
311 /* variables for the parser stack */
312 static YYSTACKDATA yystack;
313 #line 69 "calc_code_imports.y"
314 /* start of programs */
315
316 int
main(void)317 main (void)
318 {
319 while(!feof(stdin)) {
320 yyparse();
321 }
322 return 0;
323 }
324
325 static void
yyerror(const char * s)326 yyerror(const char *s)
327 {
328 fprintf(stderr, "%s\n", s);
329 }
330
331 int
yylex(void)332 yylex(void)
333 {
334 /* lexical analysis routine */
335 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
336 /* return DIGIT for a digit, yylval = 0 through 9 */
337 /* all other characters are returned immediately */
338
339 int c;
340
341 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
342
343 /* c is now nonblank */
344
345 if( islower( c )) {
346 yylval = c - 'a';
347 return ( LETTER );
348 }
349 if( isdigit( c )) {
350 yylval = c - '0';
351 return ( DIGIT );
352 }
353 return( c );
354 }
355 #line 356 "calc_code_imports.tab.c"
356
357 #if YYDEBUG
358 #include <stdio.h> /* needed for printf */
359 #endif
360
361 #include <stdlib.h> /* needed for malloc, etc */
362 #include <string.h> /* needed for memset */
363
364 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
yygrowstack(YYSTACKDATA * data)365 static int yygrowstack(YYSTACKDATA *data)
366 {
367 int i;
368 unsigned newsize;
369 YYINT *newss;
370 YYSTYPE *newvs;
371
372 if ((newsize = data->stacksize) == 0)
373 newsize = YYINITSTACKSIZE;
374 else if (newsize >= YYMAXDEPTH)
375 return YYENOMEM;
376 else if ((newsize *= 2) > YYMAXDEPTH)
377 newsize = YYMAXDEPTH;
378
379 i = (int) (data->s_mark - data->s_base);
380 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
381 if (newss == NULL)
382 return YYENOMEM;
383
384 data->s_base = newss;
385 data->s_mark = newss + i;
386
387 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
388 if (newvs == NULL)
389 return YYENOMEM;
390
391 data->l_base = newvs;
392 data->l_mark = newvs + i;
393
394 data->stacksize = newsize;
395 data->s_last = data->s_base + newsize - 1;
396 return 0;
397 }
398
399 #if YYPURE || defined(YY_NO_LEAKS)
yyfreestack(YYSTACKDATA * data)400 static void yyfreestack(YYSTACKDATA *data)
401 {
402 free(data->s_base);
403 free(data->l_base);
404 memset(data, 0, sizeof(*data));
405 }
406 #else
407 #define yyfreestack(data) /* nothing */
408 #endif
409
410 #define YYABORT goto yyabort
411 #define YYREJECT goto yyabort
412 #define YYACCEPT goto yyaccept
413 #define YYERROR goto yyerrlab
414
415 int
YYPARSE_DECL()416 YYPARSE_DECL()
417 {
418 int yym, yyn, yystate;
419 #if YYDEBUG
420 const char *yys;
421
422 if ((yys = getenv("YYDEBUG")) != NULL)
423 {
424 yyn = *yys;
425 if (yyn >= '0' && yyn <= '9')
426 yydebug = yyn - '0';
427 }
428 #endif
429
430 /* yym is set below */
431 /* yyn is set below */
432 yynerrs = 0;
433 yyerrflag = 0;
434 yychar = YYEMPTY;
435 yystate = 0;
436
437 #if YYPURE
438 memset(&yystack, 0, sizeof(yystack));
439 #endif
440
441 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
442 yystack.s_mark = yystack.s_base;
443 yystack.l_mark = yystack.l_base;
444 yystate = 0;
445 *yystack.s_mark = 0;
446
447 yyloop:
448 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
449 if (yychar < 0)
450 {
451 yychar = YYLEX;
452 if (yychar < 0) yychar = YYEOF;
453 #if YYDEBUG
454 if (yydebug)
455 {
456 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
457 printf("%sdebug: state %d, reading %d (%s)\n",
458 YYPREFIX, yystate, yychar, yys);
459 }
460 #endif
461 }
462 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
463 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
464 {
465 #if YYDEBUG
466 if (yydebug)
467 printf("%sdebug: state %d, shifting to state %d\n",
468 YYPREFIX, yystate, yytable[yyn]);
469 #endif
470 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
471 yystate = yytable[yyn];
472 *++yystack.s_mark = yytable[yyn];
473 *++yystack.l_mark = yylval;
474 yychar = YYEMPTY;
475 if (yyerrflag > 0) --yyerrflag;
476 goto yyloop;
477 }
478 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
479 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
480 {
481 yyn = yytable[yyn];
482 goto yyreduce;
483 }
484 if (yyerrflag != 0) goto yyinrecovery;
485
486 YYERROR_CALL("syntax error");
487
488 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
489 yyerrlab:
490 ++yynerrs;
491
492 yyinrecovery:
493 if (yyerrflag < 3)
494 {
495 yyerrflag = 3;
496 for (;;)
497 {
498 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
499 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
500 {
501 #if YYDEBUG
502 if (yydebug)
503 printf("%sdebug: state %d, error recovery shifting\
504 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
505 #endif
506 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
507 yystate = yytable[yyn];
508 *++yystack.s_mark = yytable[yyn];
509 *++yystack.l_mark = yylval;
510 goto yyloop;
511 }
512 else
513 {
514 #if YYDEBUG
515 if (yydebug)
516 printf("%sdebug: error recovery discarding state %d\n",
517 YYPREFIX, *yystack.s_mark);
518 #endif
519 if (yystack.s_mark <= yystack.s_base) goto yyabort;
520 --yystack.s_mark;
521 --yystack.l_mark;
522 }
523 }
524 }
525 else
526 {
527 if (yychar == YYEOF) goto yyabort;
528 #if YYDEBUG
529 if (yydebug)
530 {
531 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
532 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
533 YYPREFIX, yystate, yychar, yys);
534 }
535 #endif
536 yychar = YYEMPTY;
537 goto yyloop;
538 }
539
540 yyreduce:
541 #if YYDEBUG
542 if (yydebug)
543 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
544 YYPREFIX, yystate, yyn, yyrule[yyn]);
545 #endif
546 yym = yylen[yyn];
547 if (yym > 0)
548 yyval = yystack.l_mark[1-yym];
549 else
550 memset(&yyval, 0, sizeof yyval);
551
552 switch (yyn)
553 {
554 case 3:
555 #line 31 "calc_code_imports.y"
556 { yyerrok ; }
557 #line 558 "calc_code_imports.tab.c"
558 break;
559 case 4:
560 #line 35 "calc_code_imports.y"
561 { printf("%d\n",yystack.l_mark[0]);}
562 #line 563 "calc_code_imports.tab.c"
563 break;
564 case 5:
565 #line 37 "calc_code_imports.y"
566 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
567 #line 568 "calc_code_imports.tab.c"
568 break;
569 case 6:
570 #line 41 "calc_code_imports.y"
571 { yyval = yystack.l_mark[-1]; }
572 #line 573 "calc_code_imports.tab.c"
573 break;
574 case 7:
575 #line 43 "calc_code_imports.y"
576 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
577 #line 578 "calc_code_imports.tab.c"
578 break;
579 case 8:
580 #line 45 "calc_code_imports.y"
581 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
582 #line 583 "calc_code_imports.tab.c"
583 break;
584 case 9:
585 #line 47 "calc_code_imports.y"
586 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
587 #line 588 "calc_code_imports.tab.c"
588 break;
589 case 10:
590 #line 49 "calc_code_imports.y"
591 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
592 #line 593 "calc_code_imports.tab.c"
593 break;
594 case 11:
595 #line 51 "calc_code_imports.y"
596 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
597 #line 598 "calc_code_imports.tab.c"
598 break;
599 case 12:
600 #line 53 "calc_code_imports.y"
601 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
602 #line 603 "calc_code_imports.tab.c"
603 break;
604 case 13:
605 #line 55 "calc_code_imports.y"
606 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
607 #line 608 "calc_code_imports.tab.c"
608 break;
609 case 14:
610 #line 57 "calc_code_imports.y"
611 { yyval = - yystack.l_mark[0]; }
612 #line 613 "calc_code_imports.tab.c"
613 break;
614 case 15:
615 #line 59 "calc_code_imports.y"
616 { yyval = regs[yystack.l_mark[0]]; }
617 #line 618 "calc_code_imports.tab.c"
618 break;
619 case 17:
620 #line 64 "calc_code_imports.y"
621 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
622 #line 623 "calc_code_imports.tab.c"
623 break;
624 case 18:
625 #line 66 "calc_code_imports.y"
626 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
627 #line 628 "calc_code_imports.tab.c"
628 break;
629 #line 630 "calc_code_imports.tab.c"
630 }
631 yystack.s_mark -= yym;
632 yystate = *yystack.s_mark;
633 yystack.l_mark -= yym;
634 yym = yylhs[yyn];
635 if (yystate == 0 && yym == 0)
636 {
637 #if YYDEBUG
638 if (yydebug)
639 printf("%sdebug: after reduction, shifting from state 0 to\
640 state %d\n", YYPREFIX, YYFINAL);
641 #endif
642 yystate = YYFINAL;
643 *++yystack.s_mark = YYFINAL;
644 *++yystack.l_mark = yyval;
645 if (yychar < 0)
646 {
647 yychar = YYLEX;
648 if (yychar < 0) yychar = YYEOF;
649 #if YYDEBUG
650 if (yydebug)
651 {
652 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
653 printf("%sdebug: state %d, reading %d (%s)\n",
654 YYPREFIX, YYFINAL, yychar, yys);
655 }
656 #endif
657 }
658 if (yychar == YYEOF) goto yyaccept;
659 goto yyloop;
660 }
661 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
662 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
663 yystate = yytable[yyn];
664 else
665 yystate = yydgoto[yym];
666 #if YYDEBUG
667 if (yydebug)
668 printf("%sdebug: after reduction, shifting from state %d \
669 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
670 #endif
671 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
672 *++yystack.s_mark = (YYINT) yystate;
673 *++yystack.l_mark = yyval;
674 goto yyloop;
675
676 yyoverflow:
677 YYERROR_CALL("yacc stack overflow");
678
679 yyabort:
680 yyfreestack(&yystack);
681 return (1);
682
683 yyaccept:
684 yyfreestack(&yystack);
685 return (0);
686 }
687