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