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_imports_parse
22 #define yylex calc_code_imports_lex
26 #define yyerror calc_code_imports_error
30 #define yychar calc_code_imports_char
34 #define yyval calc_code_imports_val
38 #define yylval calc_code_imports_lval
42 #define yydebug calc_code_imports_debug
46 #define yynerrs calc_code_imports_nerrs
50 #define yyerrflag calc_code_imports_errflag
51 #endif /* yyerrflag */
54 #define yylhs calc_code_imports_lhs
58 #define yylen calc_code_imports_len
62 #define yydefred calc_code_imports_defred
66 #define yydgoto calc_code_imports_dgoto
70 #define yysindex calc_code_imports_sindex
74 #define yyrindex calc_code_imports_rindex
78 #define yygindex calc_code_imports_gindex
82 #define yytable calc_code_imports_table
86 #define yycheck calc_code_imports_check
90 #define yyname calc_code_imports_name
94 #define yyrule calc_code_imports_rule
96 #define YYPREFIX "calc_code_imports_"
100 #line 5 "calc_code_imports.y"
107 extern int yylex(void);
108 static void yyerror(const char *s);
110 #line 111 "calc_code_imports.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_imports_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_imports_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_imports_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_imports_dgoto[] = { 1,
171 static const YYINT calc_code_imports_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_imports_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_imports_gindex[] = { 0,
186 #define YYTABLESIZE 220
187 static const YYINT calc_code_imports_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_imports_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_imports_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_imports_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;
313 #line 69 "calc_code_imports.y"
314 /* start of programs */
319 while(!feof(stdin)) {
326 yyerror(const char *s)
328 fprintf(stderr, "%s\n", s);
334 /* lexical analysis routine */
335 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
336 /* return DIGIT for a digit, yylval = 0 through 9 */
337 /* all other characters are returned immediately */
341 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
343 /* c is now nonblank */
355 #line 356 "calc_code_imports.tab.c"
358 #include <stdio.h> /* needed for printf */
361 #include <stdlib.h> /* needed for malloc, etc */
362 #include <string.h> /* needed for memset */
364 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
365 static int yygrowstack(YYSTACKDATA *data)
372 if ((newsize = data->stacksize) == 0)
373 newsize = YYINITSTACKSIZE;
374 else if (newsize >= YYMAXDEPTH)
376 else if ((newsize *= 2) > YYMAXDEPTH)
377 newsize = YYMAXDEPTH;
379 i = (int) (data->s_mark - data->s_base);
380 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
384 data->s_base = newss;
385 data->s_mark = newss + i;
387 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
391 data->l_base = newvs;
392 data->l_mark = newvs + i;
394 data->stacksize = newsize;
395 data->s_last = data->s_base + newsize - 1;
399 #if YYPURE || defined(YY_NO_LEAKS)
400 static void yyfreestack(YYSTACKDATA *data)
404 memset(data, 0, sizeof(*data));
407 #define yyfreestack(data) /* nothing */
410 #define YYABORT goto yyabort
411 #define YYREJECT goto yyabort
412 #define YYACCEPT goto yyaccept
413 #define YYERROR goto yyerrlab
418 int yym, yyn, yystate;
422 if ((yys = getenv("YYDEBUG")) != 0)
425 if (yyn >= '0' && yyn <= '9')
438 memset(&yystack, 0, sizeof(yystack));
441 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
442 yystack.s_mark = yystack.s_base;
443 yystack.l_mark = yystack.l_base;
448 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
452 if (yychar < 0) yychar = YYEOF;
456 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
457 printf("%sdebug: state %d, reading %d (%s)\n",
458 YYPREFIX, yystate, yychar, yys);
462 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
463 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
467 printf("%sdebug: state %d, shifting to state %d\n",
468 YYPREFIX, yystate, yytable[yyn]);
470 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
471 yystate = yytable[yyn];
472 *++yystack.s_mark = yytable[yyn];
473 *++yystack.l_mark = yylval;
475 if (yyerrflag > 0) --yyerrflag;
478 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
479 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
484 if (yyerrflag != 0) goto yyinrecovery;
486 YYERROR_CALL("syntax error");
488 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
498 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
499 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
503 printf("%sdebug: state %d, error recovery shifting\
504 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
506 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
507 yystate = yytable[yyn];
508 *++yystack.s_mark = yytable[yyn];
509 *++yystack.l_mark = yylval;
516 printf("%sdebug: error recovery discarding state %d\n",
517 YYPREFIX, *yystack.s_mark);
519 if (yystack.s_mark <= yystack.s_base) goto yyabort;
527 if (yychar == YYEOF) goto yyabort;
531 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
532 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
533 YYPREFIX, yystate, yychar, yys);
543 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
544 YYPREFIX, yystate, yyn, yyrule[yyn]);
548 yyval = yystack.l_mark[1-yym];
550 memset(&yyval, 0, sizeof yyval);
555 #line 31 "calc_code_imports.y"
559 #line 35 "calc_code_imports.y"
560 { printf("%d\n",yystack.l_mark[0]);}
563 #line 37 "calc_code_imports.y"
564 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
567 #line 41 "calc_code_imports.y"
568 { yyval = yystack.l_mark[-1]; }
571 #line 43 "calc_code_imports.y"
572 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
575 #line 45 "calc_code_imports.y"
576 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
579 #line 47 "calc_code_imports.y"
580 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
583 #line 49 "calc_code_imports.y"
584 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
587 #line 51 "calc_code_imports.y"
588 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
591 #line 53 "calc_code_imports.y"
592 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
595 #line 55 "calc_code_imports.y"
596 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
599 #line 57 "calc_code_imports.y"
600 { yyval = - yystack.l_mark[0]; }
603 #line 59 "calc_code_imports.y"
604 { yyval = regs[yystack.l_mark[0]]; }
607 #line 64 "calc_code_imports.y"
608 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
611 #line 66 "calc_code_imports.y"
612 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
614 #line 615 "calc_code_imports.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;
633 if (yychar < 0) yychar = YYEOF;
637 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
638 printf("%sdebug: state %d, reading %d (%s)\n",
639 YYPREFIX, YYFINAL, yychar, yys);
643 if (yychar == YYEOF) goto yyaccept;
646 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
647 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
648 yystate = yytable[yyn];
650 yystate = yydgoto[yym];
653 printf("%sdebug: after reduction, shifting from state %d \
654 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
656 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
657 *++yystack.s_mark = (YYINT) yystate;
658 *++yystack.l_mark = yyval;
662 YYERROR_CALL("yacc stack overflow");
665 yyfreestack(&yystack);
669 yyfreestack(&yystack);