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)
18 #define yyparse calc_code_default_parse
22 #define yylex calc_code_default_lex
26 #define yyerror calc_code_default_error
30 #define yychar calc_code_default_char
34 #define yyval calc_code_default_val
38 #define yylval calc_code_default_lval
42 #define yydebug calc_code_default_debug
46 #define yynerrs calc_code_default_nerrs
50 #define yyerrflag calc_code_default_errflag
51 #endif /* yyerrflag */
54 #define yylhs calc_code_default_lhs
58 #define yylen calc_code_default_len
62 #define yydefred calc_code_default_defred
66 #define yydgoto calc_code_default_dgoto
70 #define yysindex calc_code_default_sindex
74 #define yyrindex calc_code_default_rindex
78 #define yygindex calc_code_default_gindex
82 #define yytable calc_code_default_table
86 #define yycheck calc_code_default_check
90 #define yyname calc_code_default_name
94 #define yyrule calc_code_default_rule
96 #define YYPREFIX "calc_code_default_"
100 #line 5 "calc_code_default.y"
107 extern int yylex(void);
108 static void yyerror(const char *s);
110 #line 111 "calc_code_default.tab.c"
112 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
113 /* Default: YYSTYPE is the semantic value type. */
115 # define YYSTYPE_IS_DECLARED 1
118 /* compatibility with bison */
120 /* compatibility with FreeBSD */
121 # ifdef YYPARSE_PARAM_TYPE
122 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
124 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
127 # define YYPARSE_DECL() yyparse(void)
130 /* Parameters sent to lex. */
132 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
133 # define YYLEX yylex(YYLEX_PARAM)
135 # define YYLEX_DECL() yylex(void)
136 # define YYLEX yylex()
139 /* Parameters sent to yyerror. */
141 #define YYERROR_DECL() yyerror(const char *s)
144 #define YYERROR_CALL(msg) yyerror(msg)
147 extern int YYPARSE_DECL();
152 #define YYERRCODE 256
154 static const YYINT calc_code_default_lhs[] = { -1,
155 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
156 2, 2, 2, 2, 2, 2, 3, 3,
158 static const YYINT calc_code_default_len[] = { 2,
159 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
160 3, 3, 3, 2, 1, 1, 1, 2,
162 static const YYINT calc_code_default_defred[] = { 1,
163 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
164 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
165 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
168 static const YYINT calc_code_default_dgoto[] = { 1,
171 static const YYINT calc_code_default_sindex[] = { 0,
172 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
173 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
174 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
177 static const YYINT calc_code_default_rindex[] = { 0,
178 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
183 static const YYINT calc_code_default_gindex[] = { 0,
186 #define YYTABLESIZE 220
187 static const YYINT calc_code_default_table[] = { 6,
188 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
189 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
190 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
191 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
192 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
193 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
194 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
195 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
196 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
197 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
198 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
199 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
200 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
201 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
202 0, 0, 0, 0, 0, 16, 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, 0, 0, 0, 0, 0,
207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
209 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
211 static const YYINT calc_code_default_check[] = { 40,
212 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
213 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
214 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
215 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
216 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
217 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
218 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
219 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
220 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
221 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
222 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
223 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
224 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
225 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
226 -1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1,
231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
232 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
233 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
239 #define YYMAXTOKEN 259
240 #define YYUNDFTOKEN 265
241 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
243 static const char *const calc_code_default_name[] = {
245 "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,
246 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
247 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
248 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
249 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
250 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
251 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
254 static const char *const calc_code_default_rule[] = {
257 "list : list stat '\\n'",
258 "list : list error '\\n'",
260 "stat : LETTER '=' expr",
261 "expr : '(' expr ')'",
262 "expr : expr '+' expr",
263 "expr : expr '-' expr",
264 "expr : expr '*' expr",
265 "expr : expr '/' expr",
266 "expr : expr '%' expr",
267 "expr : expr '&' expr",
268 "expr : expr '|' expr",
273 "number : number DIGIT",
288 /* define the initial stack-sizes */
291 #define YYMAXDEPTH YYSTACKSIZE
294 #define YYSTACKSIZE YYMAXDEPTH
296 #define YYSTACKSIZE 10000
297 #define YYMAXDEPTH 10000
301 #define YYINITSTACKSIZE 200
311 /* variables for the parser stack */
312 static YYSTACKDATA yystack;
314 /* %code "" block start */
315 #line 1 "calc_code_default.y"
317 #line 2 "calc_code_default.y"
319 /* %code "" block end */
320 #line 321 "calc_code_default.tab.c"
321 #line 69 "calc_code_default.y"
322 /* start of programs */
327 while(!feof(stdin)) {
334 yyerror(const char *s)
336 fprintf(stderr, "%s\n", s);
342 /* lexical analysis routine */
343 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
344 /* return DIGIT for a digit, yylval = 0 through 9 */
345 /* all other characters are returned immediately */
349 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
351 /* c is now nonblank */
363 #line 364 "calc_code_default.tab.c"
366 #include <stdio.h> /* needed for printf */
369 #include <stdlib.h> /* needed for malloc, etc */
370 #include <string.h> /* needed for memset */
372 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
373 static int yygrowstack(YYSTACKDATA *data)
380 if ((newsize = data->stacksize) == 0)
381 newsize = YYINITSTACKSIZE;
382 else if (newsize >= YYMAXDEPTH)
384 else if ((newsize *= 2) > YYMAXDEPTH)
385 newsize = YYMAXDEPTH;
387 i = (int) (data->s_mark - data->s_base);
388 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
392 data->s_base = newss;
393 data->s_mark = newss + i;
395 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
399 data->l_base = newvs;
400 data->l_mark = newvs + i;
402 data->stacksize = newsize;
403 data->s_last = data->s_base + newsize - 1;
407 #if YYPURE || defined(YY_NO_LEAKS)
408 static void yyfreestack(YYSTACKDATA *data)
412 memset(data, 0, sizeof(*data));
415 #define yyfreestack(data) /* nothing */
418 #define YYABORT goto yyabort
419 #define YYREJECT goto yyabort
420 #define YYACCEPT goto yyaccept
421 #define YYERROR goto yyerrlab
426 int yym, yyn, yystate;
430 if ((yys = getenv("YYDEBUG")) != 0)
433 if (yyn >= '0' && yyn <= '9')
446 memset(&yystack, 0, sizeof(yystack));
449 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
450 yystack.s_mark = yystack.s_base;
451 yystack.l_mark = yystack.l_base;
456 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
460 if (yychar < 0) yychar = YYEOF;
464 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
465 printf("%sdebug: state %d, reading %d (%s)\n",
466 YYPREFIX, yystate, yychar, yys);
470 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
471 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
475 printf("%sdebug: state %d, shifting to state %d\n",
476 YYPREFIX, yystate, yytable[yyn]);
478 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
479 yystate = yytable[yyn];
480 *++yystack.s_mark = yytable[yyn];
481 *++yystack.l_mark = yylval;
483 if (yyerrflag > 0) --yyerrflag;
486 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
487 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
492 if (yyerrflag != 0) goto yyinrecovery;
494 YYERROR_CALL("syntax error");
496 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
506 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
507 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
511 printf("%sdebug: state %d, error recovery shifting\
512 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
514 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
515 yystate = yytable[yyn];
516 *++yystack.s_mark = yytable[yyn];
517 *++yystack.l_mark = yylval;
524 printf("%sdebug: error recovery discarding state %d\n",
525 YYPREFIX, *yystack.s_mark);
527 if (yystack.s_mark <= yystack.s_base) goto yyabort;
535 if (yychar == YYEOF) goto yyabort;
539 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
540 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
541 YYPREFIX, yystate, yychar, yys);
551 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
552 YYPREFIX, yystate, yyn, yyrule[yyn]);
556 yyval = yystack.l_mark[1-yym];
558 memset(&yyval, 0, sizeof yyval);
563 #line 31 "calc_code_default.y"
567 #line 35 "calc_code_default.y"
568 { printf("%d\n",yystack.l_mark[0]);}
571 #line 37 "calc_code_default.y"
572 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
575 #line 41 "calc_code_default.y"
576 { yyval = yystack.l_mark[-1]; }
579 #line 43 "calc_code_default.y"
580 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
583 #line 45 "calc_code_default.y"
584 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
587 #line 47 "calc_code_default.y"
588 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
591 #line 49 "calc_code_default.y"
592 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
595 #line 51 "calc_code_default.y"
596 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
599 #line 53 "calc_code_default.y"
600 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
603 #line 55 "calc_code_default.y"
604 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
607 #line 57 "calc_code_default.y"
608 { yyval = - yystack.l_mark[0]; }
611 #line 59 "calc_code_default.y"
612 { yyval = regs[yystack.l_mark[0]]; }
615 #line 64 "calc_code_default.y"
616 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
619 #line 66 "calc_code_default.y"
620 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
622 #line 623 "calc_code_default.tab.c"
624 yystack.s_mark -= yym;
625 yystate = *yystack.s_mark;
626 yystack.l_mark -= yym;
628 if (yystate == 0 && yym == 0)
632 printf("%sdebug: after reduction, shifting from state 0 to\
633 state %d\n", YYPREFIX, YYFINAL);
636 *++yystack.s_mark = YYFINAL;
637 *++yystack.l_mark = yyval;
641 if (yychar < 0) yychar = YYEOF;
645 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
646 printf("%sdebug: state %d, reading %d (%s)\n",
647 YYPREFIX, YYFINAL, yychar, yys);
651 if (yychar == YYEOF) goto yyaccept;
654 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
655 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
656 yystate = yytable[yyn];
658 yystate = yydgoto[yym];
661 printf("%sdebug: after reduction, shifting from state %d \
662 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
664 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
665 *++yystack.s_mark = (YYINT) yystate;
666 *++yystack.l_mark = yyval;
670 YYERROR_CALL("yacc stack overflow");
673 yyfreestack(&yystack);
677 yyfreestack(&yystack);