xref: /minix3/external/bsd/byacc/dist/test/yacc/calc3.tab.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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