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