1 /* $NetBSD: calc.tab.c,v 1.1.1.5 2013/04/06 14:45:27 christos Exp $ */
4 static const char yysccsid
[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
12 #define yyclearin (yychar = YYEMPTY)
13 #define yyerrok (yyerrflag = 0)
14 #define YYRECOVERING() (yyerrflag != 0)
18 #define yyparse calc_parse
22 #define yylex calc_lex
26 #define yyerror calc_error
30 #define yychar calc_char
34 #define yyval calc_val
38 #define yylval calc_lval
42 #define yydebug calc_debug
46 #define yynerrs calc_nerrs
50 #define yyerrflag calc_errflag
51 #endif /* yyerrflag */
54 #define yylhs calc_lhs
58 #define yylen calc_len
62 #define yydefred calc_defred
66 #define yydgoto calc_dgoto
70 #define yysindex calc_sindex
74 #define yyrindex calc_rindex
78 #define yygindex calc_gindex
82 #define yytable calc_table
86 #define yycheck calc_check
90 #define yyname calc_name
94 #define yyrule calc_rule
96 #define YYPREFIX "calc_"
107 extern int yylex(void);
108 static void yyerror(const char *s
);
110 #line 109 "calc.tab.c"
116 /* compatibility with bison */
118 /* compatibility with FreeBSD */
119 # ifdef YYPARSE_PARAM_TYPE
120 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
122 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
125 # define YYPARSE_DECL() yyparse(void)
128 /* Parameters sent to lex. */
130 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
131 # define YYLEX yylex(YYLEX_PARAM)
133 # define YYLEX_DECL() yylex(void)
134 # define YYLEX yylex()
137 /* Parameters sent to yyerror. */
139 #define YYERROR_DECL() yyerror(const char *s)
142 #define YYERROR_CALL(msg) yyerror(msg)
145 extern int YYPARSE_DECL();
150 #define YYERRCODE 256
151 static const short calc_lhs
[] = { -1,
152 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
153 2, 2, 2, 2, 2, 2, 3, 3,
155 static const short calc_len
[] = { 2,
156 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
157 3, 3, 3, 2, 1, 1, 1, 2,
159 static const short calc_defred
[] = { 1,
160 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
161 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
162 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
165 static const short calc_dgoto
[] = { 1,
168 static const short calc_sindex
[] = { 0,
169 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
170 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
171 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
174 static const short calc_rindex
[] = { 0,
175 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
177 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
180 static const short calc_gindex
[] = { 0,
183 #define YYTABLESIZE 220
184 static const short calc_table
[] = { 6,
185 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
186 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
187 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
188 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
189 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
190 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
191 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
192 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
193 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
194 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
195 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
196 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
197 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
198 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
199 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
200 0, 0, 0, 0, 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 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, 2, 3, 4, 3, 12,
208 static const short calc_check
[] = { 40,
209 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
210 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
211 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
212 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
213 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
214 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
215 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
216 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
217 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
218 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
219 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
220 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
221 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
222 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
223 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
224 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
225 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
226 -1, -1, -1, -1, -1, -1, -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, 256, 257, 258, 257, 258,
236 #define YYMAXTOKEN 259
238 static const char *yyname
[] = {
240 "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,
241 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
242 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
243 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
244 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
245 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
247 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",
249 static const char *yyrule
[] = {
252 "list : list stat '\\n'",
253 "list : list error '\\n'",
255 "stat : LETTER '=' expr",
256 "expr : '(' expr ')'",
257 "expr : expr '+' expr",
258 "expr : expr '-' expr",
259 "expr : expr '*' expr",
260 "expr : expr '/' expr",
261 "expr : expr '%' expr",
262 "expr : expr '&' expr",
263 "expr : expr '|' expr",
268 "number : number DIGIT",
281 /* define the initial stack-sizes */
284 #define YYMAXDEPTH YYSTACKSIZE
287 #define YYSTACKSIZE YYMAXDEPTH
289 #define YYSTACKSIZE 500
290 #define YYMAXDEPTH 500
294 #define YYINITSTACKSIZE 500
304 /* variables for the parser stack */
305 static YYSTACKDATA yystack
;
307 /* start of programs */
312 while(!feof(stdin
)) {
319 yyerror(const char *s
)
321 fprintf(stderr
, "%s\n", s
);
327 /* lexical analysis routine */
328 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
329 /* return DIGIT for a digit, yylval = 0 through 9 */
330 /* all other characters are returned immediately */
334 while( (c
=getchar()) == ' ' ) { /* skip blanks */ }
336 /* c is now nonblank */
348 #line 347 "calc.tab.c"
351 #include <stdio.h> /* needed for printf */
354 #include <stdlib.h> /* needed for malloc, etc */
355 #include <string.h> /* needed for memset */
357 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
358 static int yygrowstack(YYSTACKDATA
*data
)
365 if ((newsize
= data
->stacksize
) == 0)
366 newsize
= YYINITSTACKSIZE
;
367 else if (newsize
>= YYMAXDEPTH
)
369 else if ((newsize
*= 2) > YYMAXDEPTH
)
370 newsize
= YYMAXDEPTH
;
372 i
= (int) (data
->s_mark
- data
->s_base
);
373 newss
= (short *)realloc(data
->s_base
, newsize
* sizeof(*newss
));
377 data
->s_base
= newss
;
378 data
->s_mark
= newss
+ i
;
380 newvs
= (YYSTYPE
*)realloc(data
->l_base
, newsize
* sizeof(*newvs
));
384 data
->l_base
= newvs
;
385 data
->l_mark
= newvs
+ i
;
387 data
->stacksize
= newsize
;
388 data
->s_last
= data
->s_base
+ newsize
- 1;
392 #if YYPURE || defined(YY_NO_LEAKS)
393 static void yyfreestack(YYSTACKDATA
*data
)
397 memset(data
, 0, sizeof(*data
));
400 #define yyfreestack(data) /* nothing */
403 #define YYABORT goto yyabort
404 #define YYREJECT goto yyabort
405 #define YYACCEPT goto yyaccept
406 #define YYERROR goto yyerrlab
411 int yym
, yyn
, yystate
;
415 if ((yys
= getenv("YYDEBUG")) != 0)
418 if (yyn
>= '0' && yyn
<= '9')
429 memset(&yystack
, 0, sizeof(yystack
));
432 if (yystack
.s_base
== NULL
&& yygrowstack(&yystack
)) goto yyoverflow
;
433 yystack
.s_mark
= yystack
.s_base
;
434 yystack
.l_mark
= yystack
.l_base
;
439 if ((yyn
= yydefred
[yystate
]) != 0) goto yyreduce
;
442 if ((yychar
= YYLEX
) < 0) yychar
= 0;
447 if (yychar
<= YYMAXTOKEN
) yys
= yyname
[yychar
];
448 if (!yys
) yys
= "illegal-symbol";
449 printf("%sdebug: state %d, reading %d (%s)\n",
450 YYPREFIX
, yystate
, yychar
, yys
);
454 if ((yyn
= yysindex
[yystate
]) && (yyn
+= yychar
) >= 0 &&
455 yyn
<= YYTABLESIZE
&& yycheck
[yyn
] == yychar
)
459 printf("%sdebug: state %d, shifting to state %d\n",
460 YYPREFIX
, yystate
, yytable
[yyn
]);
462 if (yystack
.s_mark
>= yystack
.s_last
&& yygrowstack(&yystack
))
466 yystate
= yytable
[yyn
];
467 *++yystack
.s_mark
= yytable
[yyn
];
468 *++yystack
.l_mark
= yylval
;
470 if (yyerrflag
> 0) --yyerrflag
;
473 if ((yyn
= yyrindex
[yystate
]) && (yyn
+= yychar
) >= 0 &&
474 yyn
<= YYTABLESIZE
&& yycheck
[yyn
] == yychar
)
479 if (yyerrflag
) goto yyinrecovery
;
481 yyerror("syntax error");
494 if ((yyn
= yysindex
[*yystack
.s_mark
]) && (yyn
+= YYERRCODE
) >= 0 &&
495 yyn
<= YYTABLESIZE
&& yycheck
[yyn
] == YYERRCODE
)
499 printf("%sdebug: state %d, error recovery shifting\
500 to state %d\n", YYPREFIX
, *yystack
.s_mark
, yytable
[yyn
]);
502 if (yystack
.s_mark
>= yystack
.s_last
&& yygrowstack(&yystack
))
506 yystate
= yytable
[yyn
];
507 *++yystack
.s_mark
= yytable
[yyn
];
508 *++yystack
.l_mark
= yylval
;
515 printf("%sdebug: error recovery discarding state %d\n",
516 YYPREFIX
, *yystack
.s_mark
);
518 if (yystack
.s_mark
<= yystack
.s_base
) goto yyabort
;
526 if (yychar
== 0) goto yyabort
;
531 if (yychar
<= YYMAXTOKEN
) yys
= yyname
[yychar
];
532 if (!yys
) yys
= "illegal-symbol";
533 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
534 YYPREFIX
, yystate
, yychar
, yys
);
544 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
545 YYPREFIX
, yystate
, yyn
, yyrule
[yyn
]);
549 yyval
= yystack
.l_mark
[1-yym
];
551 memset(&yyval
, 0, sizeof yyval
);
560 { printf("%d\n",yystack
.l_mark
[0]);}
564 { regs
[yystack
.l_mark
[-2]] = yystack
.l_mark
[0]; }
568 { yyval
= yystack
.l_mark
[-1]; }
572 { yyval
= yystack
.l_mark
[-2] + yystack
.l_mark
[0]; }
576 { yyval
= yystack
.l_mark
[-2] - yystack
.l_mark
[0]; }
580 { yyval
= yystack
.l_mark
[-2] * yystack
.l_mark
[0]; }
584 { yyval
= yystack
.l_mark
[-2] / yystack
.l_mark
[0]; }
588 { yyval
= yystack
.l_mark
[-2] % yystack
.l_mark
[0]; }
592 { yyval
= yystack
.l_mark
[-2] & yystack
.l_mark
[0]; }
596 { yyval
= yystack
.l_mark
[-2] | yystack
.l_mark
[0]; }
600 { yyval
= - yystack
.l_mark
[0]; }
604 { yyval
= regs
[yystack
.l_mark
[0]]; }
608 { yyval
= yystack
.l_mark
[0]; base
= (yystack
.l_mark
[0]==0) ? 8 : 10; }
612 { yyval
= base
* yystack
.l_mark
[-1] + yystack
.l_mark
[0]; }
614 #line 613 "calc.tab.c"
616 yystack
.s_mark
-= yym
;
617 yystate
= *yystack
.s_mark
;
618 yystack
.l_mark
-= yym
;
620 if (yystate
== 0 && yym
== 0)
624 printf("%sdebug: after reduction, shifting from state 0 to\
625 state %d\n", YYPREFIX
, YYFINAL
);
628 *++yystack
.s_mark
= YYFINAL
;
629 *++yystack
.l_mark
= yyval
;
632 if ((yychar
= YYLEX
) < 0) yychar
= 0;
637 if (yychar
<= YYMAXTOKEN
) yys
= yyname
[yychar
];
638 if (!yys
) yys
= "illegal-symbol";
639 printf("%sdebug: state %d, reading %d (%s)\n",
640 YYPREFIX
, YYFINAL
, yychar
, yys
);
644 if (yychar
== 0) goto yyaccept
;
647 if ((yyn
= yygindex
[yym
]) && (yyn
+= yystate
) >= 0 &&
648 yyn
<= YYTABLESIZE
&& yycheck
[yyn
] == yystate
)
649 yystate
= yytable
[yyn
];
651 yystate
= yydgoto
[yym
];
654 printf("%sdebug: after reduction, shifting from state %d \
655 to state %d\n", YYPREFIX
, *yystack
.s_mark
, yystate
);
657 if (yystack
.s_mark
>= yystack
.s_last
&& yygrowstack(&yystack
))
661 *++yystack
.s_mark
= (short) yystate
;
662 *++yystack
.l_mark
= yyval
;
666 yyerror("yacc stack overflow");
669 yyfreestack(&yystack
);
673 yyfreestack(&yystack
);