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