1 /* original parser id follows */
2 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
3 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
8 #define YYCHECK "yyyymmdd"
11 #define yyclearin (yychar = YYEMPTY)
12 #define yyerrok (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
17 /* %code "top" block start */
18 #line 5 "calc_code_all.y"
20 /* %code "top" block end */
21 #line 22 "calc_code_all.tab.c"
24 #define yyparse calc_code_all_parse
28 #define yylex calc_code_all_lex
32 #define yyerror calc_code_all_error
36 #define yychar calc_code_all_char
40 #define yyval calc_code_all_val
44 #define yylval calc_code_all_lval
48 #define yydebug calc_code_all_debug
52 #define yynerrs calc_code_all_nerrs
56 #define yyerrflag calc_code_all_errflag
57 #endif /* yyerrflag */
60 #define yylhs calc_code_all_lhs
64 #define yylen calc_code_all_len
68 #define yydefred calc_code_all_defred
72 #define yydgoto calc_code_all_dgoto
76 #define yysindex calc_code_all_sindex
80 #define yyrindex calc_code_all_rindex
84 #define yygindex calc_code_all_gindex
88 #define yytable calc_code_all_table
92 #define yycheck calc_code_all_check
96 #define yyname calc_code_all_name
100 #define yyrule calc_code_all_rule
102 #define YYPREFIX "calc_code_all_"
106 #line 9 "calc_code_all.y"
113 extern int yylex(void);
114 static void yyerror(const char *s);
116 #line 117 "calc_code_all.tab.c"
118 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
119 /* Default: YYSTYPE is the semantic value type. */
121 # define YYSTYPE_IS_DECLARED 1
124 /* compatibility with bison */
126 /* compatibility with FreeBSD */
127 # ifdef YYPARSE_PARAM_TYPE
128 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
130 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
133 # define YYPARSE_DECL() yyparse(void)
136 /* Parameters sent to lex. */
138 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
139 # define YYLEX yylex(YYLEX_PARAM)
141 # define YYLEX_DECL() yylex(void)
142 # define YYLEX yylex()
145 /* Parameters sent to yyerror. */
147 #define YYERROR_DECL() yyerror(const char *s)
150 #define YYERROR_CALL(msg) yyerror(msg)
153 extern int YYPARSE_DECL();
158 #define YYERRCODE 256
160 static const YYINT calc_code_all_lhs[] = { -1,
161 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
162 2, 2, 2, 2, 2, 2, 3, 3,
164 static const YYINT calc_code_all_len[] = { 2,
165 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
166 3, 3, 3, 2, 1, 1, 1, 2,
168 static const YYINT calc_code_all_defred[] = { 1,
169 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
170 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
171 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
174 static const YYINT calc_code_all_dgoto[] = { 1,
177 static const YYINT calc_code_all_sindex[] = { 0,
178 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
179 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
180 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
183 static const YYINT calc_code_all_rindex[] = { 0,
184 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
185 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
186 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
189 static const YYINT calc_code_all_gindex[] = { 0,
192 #define YYTABLESIZE 220
193 static const YYINT calc_code_all_table[] = { 6,
194 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
195 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
196 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
197 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
198 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
199 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
200 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
201 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
202 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
203 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
204 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
205 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
206 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
207 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
208 0, 0, 0, 0, 0, 16, 0, 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, 2, 3, 4, 3, 12,
217 static const YYINT calc_code_all_check[] = { 40,
218 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
219 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
220 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
221 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
222 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
223 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
224 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
225 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
226 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
227 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
228 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
229 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
230 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
231 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
232 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
233 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
235 -1, -1, -1, -1, -1, -1, -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, 256, 257, 258, 257, 258,
245 #define YYMAXTOKEN 259
246 #define YYUNDFTOKEN 265
247 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
249 static const char *const calc_code_all_name[] = {
251 "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,
252 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
253 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
254 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,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,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,0,0,0,
258 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
260 static const char *const calc_code_all_rule[] = {
263 "list : list stat '\\n'",
264 "list : list error '\\n'",
266 "stat : LETTER '=' expr",
267 "expr : '(' expr ')'",
268 "expr : expr '+' expr",
269 "expr : expr '-' expr",
270 "expr : expr '*' expr",
271 "expr : expr '/' expr",
272 "expr : expr '%' expr",
273 "expr : expr '&' expr",
274 "expr : expr '|' expr",
279 "number : number DIGIT",
294 /* %code "requires" block start */
295 #line 3 "calc_code_all.y"
297 /* %code "requires" block end */
298 #line 299 "calc_code_all.tab.c"
300 /* define the initial stack-sizes */
303 #define YYMAXDEPTH YYSTACKSIZE
306 #define YYSTACKSIZE YYMAXDEPTH
308 #define YYSTACKSIZE 10000
309 #define YYMAXDEPTH 10000
313 #define YYINITSTACKSIZE 200
323 /* variables for the parser stack */
324 static YYSTACKDATA yystack;
326 /* %code "provides" block start */
327 #line 4 "calc_code_all.y"
329 #line 6 "calc_code_all.y"
331 /* %code "provides" block end */
332 #line 333 "calc_code_all.tab.c"
334 /* %code "" block start */
335 #line 1 "calc_code_all.y"
337 #line 2 "calc_code_all.y"
339 /* %code "" block end */
340 #line 341 "calc_code_all.tab.c"
341 #line 73 "calc_code_all.y"
342 /* start of programs */
347 while(!feof(stdin)) {
354 yyerror(const char *s)
356 fprintf(stderr, "%s\n", s);
362 /* lexical analysis routine */
363 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
364 /* return DIGIT for a digit, yylval = 0 through 9 */
365 /* all other characters are returned immediately */
369 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
371 /* c is now nonblank */
383 #line 384 "calc_code_all.tab.c"
386 #include <stdio.h> /* needed for printf */
389 #include <stdlib.h> /* needed for malloc, etc */
390 #include <string.h> /* needed for memset */
392 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
393 static int yygrowstack(YYSTACKDATA *data)
400 if ((newsize = data->stacksize) == 0)
401 newsize = YYINITSTACKSIZE;
402 else if (newsize >= YYMAXDEPTH)
404 else if ((newsize *= 2) > YYMAXDEPTH)
405 newsize = YYMAXDEPTH;
407 i = (int) (data->s_mark - data->s_base);
408 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
412 data->s_base = newss;
413 data->s_mark = newss + i;
415 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
419 data->l_base = newvs;
420 data->l_mark = newvs + i;
422 data->stacksize = newsize;
423 data->s_last = data->s_base + newsize - 1;
427 #if YYPURE || defined(YY_NO_LEAKS)
428 static void yyfreestack(YYSTACKDATA *data)
432 memset(data, 0, sizeof(*data));
435 #define yyfreestack(data) /* nothing */
438 #define YYABORT goto yyabort
439 #define YYREJECT goto yyabort
440 #define YYACCEPT goto yyaccept
441 #define YYERROR goto yyerrlab
446 int yym, yyn, yystate;
450 if ((yys = getenv("YYDEBUG")) != 0)
453 if (yyn >= '0' && yyn <= '9')
458 /* yym is set below */
459 /* yyn is set below */
463 /* yystate is set below */
466 memset(&yystack, 0, sizeof(yystack));
469 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
470 yystack.s_mark = yystack.s_base;
471 yystack.l_mark = yystack.l_base;
476 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
480 if (yychar < 0) yychar = YYEOF;
484 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
485 printf("%sdebug: state %d, reading %d (%s)\n",
486 YYPREFIX, yystate, yychar, yys);
490 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
491 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
495 printf("%sdebug: state %d, shifting to state %d\n",
496 YYPREFIX, yystate, yytable[yyn]);
498 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
499 yystate = yytable[yyn];
500 *++yystack.s_mark = yytable[yyn];
501 *++yystack.l_mark = yylval;
503 if (yyerrflag > 0) --yyerrflag;
506 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
507 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
512 if (yyerrflag != 0) goto yyinrecovery;
514 YYERROR_CALL("syntax error");
516 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
526 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
527 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
531 printf("%sdebug: state %d, error recovery shifting\
532 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
534 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
535 yystate = yytable[yyn];
536 *++yystack.s_mark = yytable[yyn];
537 *++yystack.l_mark = yylval;
544 printf("%sdebug: error recovery discarding state %d\n",
545 YYPREFIX, *yystack.s_mark);
547 if (yystack.s_mark <= yystack.s_base) goto yyabort;
555 if (yychar == YYEOF) goto yyabort;
559 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
560 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
561 YYPREFIX, yystate, yychar, yys);
571 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
572 YYPREFIX, yystate, yyn, yyrule[yyn]);
576 yyval = yystack.l_mark[1-yym];
578 memset(&yyval, 0, sizeof yyval);
583 #line 35 "calc_code_all.y"
587 #line 39 "calc_code_all.y"
588 { printf("%d\n",yystack.l_mark[0]);}
591 #line 41 "calc_code_all.y"
592 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
595 #line 45 "calc_code_all.y"
596 { yyval = yystack.l_mark[-1]; }
599 #line 47 "calc_code_all.y"
600 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
603 #line 49 "calc_code_all.y"
604 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
607 #line 51 "calc_code_all.y"
608 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
611 #line 53 "calc_code_all.y"
612 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
615 #line 55 "calc_code_all.y"
616 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
619 #line 57 "calc_code_all.y"
620 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
623 #line 59 "calc_code_all.y"
624 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
627 #line 61 "calc_code_all.y"
628 { yyval = - yystack.l_mark[0]; }
631 #line 63 "calc_code_all.y"
632 { yyval = regs[yystack.l_mark[0]]; }
635 #line 68 "calc_code_all.y"
636 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
639 #line 70 "calc_code_all.y"
640 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
642 #line 643 "calc_code_all.tab.c"
644 yystack.s_mark -= yym;
645 yystate = *yystack.s_mark;
646 yystack.l_mark -= yym;
648 if (yystate == 0 && yym == 0)
652 printf("%sdebug: after reduction, shifting from state 0 to\
653 state %d\n", YYPREFIX, YYFINAL);
656 *++yystack.s_mark = YYFINAL;
657 *++yystack.l_mark = yyval;
661 if (yychar < 0) yychar = YYEOF;
665 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
666 printf("%sdebug: state %d, reading %d (%s)\n",
667 YYPREFIX, YYFINAL, yychar, yys);
671 if (yychar == YYEOF) goto yyaccept;
674 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
675 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
676 yystate = yytable[yyn];
678 yystate = yydgoto[yym];
681 printf("%sdebug: after reduction, shifting from state %d \
682 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
684 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
685 *++yystack.s_mark = (YYINT) yystate;
686 *++yystack.l_mark = yyval;
690 YYERROR_CALL("yacc stack overflow");
693 yyfreestack(&yystack);
697 yyfreestack(&yystack);