2 static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
8 #define YYPATCH 20140101
11 #define yyclearin (yychar = YYEMPTY)
12 #define yyerrok (yyerrflag = 0)
13 #define YYRECOVERING() (yyerrflag != 0)
28 static void yyerror(const char *s);
31 #line 31 "/dev/stdout"
37 /* compatibility with bison */
39 /* compatibility with FreeBSD */
40 # ifdef YYPARSE_PARAM_TYPE
41 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
43 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
46 # define YYPARSE_DECL() yyparse(void)
49 /* Parameters sent to lex. */
51 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
52 # define YYLEX yylex(YYLEX_PARAM)
54 # define YYLEX_DECL() yylex(void)
55 # define YYLEX yylex()
58 /* Parameters sent to yyerror. */
60 #define YYERROR_DECL() yyerror(const char *s)
63 #define YYERROR_CALL(msg) yyerror(msg)
66 extern int YYPARSE_DECL();
72 static const short yylhs[] = { -1,
73 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
74 2, 2, 2, 2, 2, 2, 3, 3,
76 static const short yylen[] = { 2,
77 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
78 3, 3, 3, 2, 1, 1, 1, 2,
80 static const short yydefred[] = { 1,
81 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
82 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
83 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
86 static const short yydgoto[] = { 1,
89 static const short yysindex[] = { 0,
90 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
91 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
92 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
95 static const short yyrindex[] = { 0,
96 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
97 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
98 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
101 static const short yygindex[] = { 0,
104 #define YYTABLESIZE 220
105 static const short yytable[] = { 6,
106 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
107 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
108 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
109 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
110 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
111 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
112 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
113 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
114 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
115 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
116 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
117 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
118 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
119 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
120 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
125 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
127 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
129 static const short yycheck[] = { 40,
130 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
131 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
132 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
133 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
134 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
135 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
136 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
137 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
138 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
139 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
140 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
141 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
142 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
143 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
144 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
145 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
146 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
147 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
148 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
149 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
150 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
151 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
157 #define YYMAXTOKEN 259
158 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? (YYMAXTOKEN + 1) : (a))
160 static const char *yyname[] = {
162 "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,
163 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
164 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
165 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
166 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
167 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
168 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
169 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS","illegal-symbol",
171 static const char *yyrule[] = {
174 "list : list stat '\\n'",
175 "list : list error '\\n'",
177 "stat : LETTER '=' expr",
178 "expr : '(' expr ')'",
179 "expr : expr '+' expr",
180 "expr : expr '-' expr",
181 "expr : expr '*' expr",
182 "expr : expr '/' expr",
183 "expr : expr '%' expr",
184 "expr : expr '&' expr",
185 "expr : expr '|' expr",
190 "number : number DIGIT",
203 /* define the initial stack-sizes */
206 #define YYMAXDEPTH YYSTACKSIZE
209 #define YYSTACKSIZE YYMAXDEPTH
211 #define YYSTACKSIZE 10000
212 #define YYMAXDEPTH 10000
216 #define YYINITSTACKSIZE 200
226 /* variables for the parser stack */
227 static YYSTACKDATA yystack;
228 #line 68 "code_calc.y"
229 /* start of programs */
232 extern int YYLEX_DECL();
238 while(!feof(stdin)) {
245 yyerror(const char *s)
247 fprintf(stderr, "%s\n", s);
253 /* lexical analysis routine */
254 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
255 /* return DIGIT for a digit, yylval = 0 through 9 */
256 /* all other characters are returned immediately */
260 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
262 /* c is now nonblank */
274 #line 273 "/dev/stdout"
277 #include <stdio.h> /* needed for printf */
280 #include <stdlib.h> /* needed for malloc, etc */
281 #include <string.h> /* needed for memset */
283 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
284 static int yygrowstack(YYSTACKDATA *data)
291 if ((newsize = data->stacksize) == 0)
292 newsize = YYINITSTACKSIZE;
293 else if (newsize >= YYMAXDEPTH)
295 else if ((newsize *= 2) > YYMAXDEPTH)
296 newsize = YYMAXDEPTH;
298 i = (int) (data->s_mark - data->s_base);
299 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
303 data->s_base = newss;
304 data->s_mark = newss + i;
306 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
310 data->l_base = newvs;
311 data->l_mark = newvs + i;
313 data->stacksize = newsize;
314 data->s_last = data->s_base + newsize - 1;
318 #if YYPURE || defined(YY_NO_LEAKS)
319 static void yyfreestack(YYSTACKDATA *data)
323 memset(data, 0, sizeof(*data));
326 #define yyfreestack(data) /* nothing */
329 #define YYABORT goto yyabort
330 #define YYREJECT goto yyabort
331 #define YYACCEPT goto yyaccept
332 #define YYERROR goto yyerrlab
337 int yym, yyn, yystate;
341 if ((yys = getenv("YYDEBUG")) != 0)
344 if (yyn >= '0' && yyn <= '9')
355 memset(&yystack, 0, sizeof(yystack));
358 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
359 yystack.s_mark = yystack.s_base;
360 yystack.l_mark = yystack.l_base;
365 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
368 if ((yychar = YYLEX) < 0) yychar = 0;
372 yys = yyname[YYTRANSLATE(yychar)];
373 printf("%sdebug: state %d, reading %d (%s)\n",
374 YYPREFIX, yystate, yychar, yys);
378 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
379 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
383 printf("%sdebug: state %d, shifting to state %d\n",
384 YYPREFIX, yystate, yytable[yyn]);
386 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
390 yystate = yytable[yyn];
391 *++yystack.s_mark = yytable[yyn];
392 *++yystack.l_mark = yylval;
394 if (yyerrflag > 0) --yyerrflag;
397 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
398 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
403 if (yyerrflag) goto yyinrecovery;
405 yyerror("syntax error");
418 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
419 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
423 printf("%sdebug: state %d, error recovery shifting\
424 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
426 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
430 yystate = yytable[yyn];
431 *++yystack.s_mark = yytable[yyn];
432 *++yystack.l_mark = yylval;
439 printf("%sdebug: error recovery discarding state %d\n",
440 YYPREFIX, *yystack.s_mark);
442 if (yystack.s_mark <= yystack.s_base) goto yyabort;
450 if (yychar == 0) goto yyabort;
454 yys = yyname[YYTRANSLATE(yychar)];
455 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
456 YYPREFIX, yystate, yychar, yys);
466 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
467 YYPREFIX, yystate, yyn, yyrule[yyn]);
471 yyval = yystack.l_mark[1-yym];
473 memset(&yyval, 0, sizeof yyval);
477 #line 30 "code_calc.y"
481 #line 34 "code_calc.y"
482 { printf("%d\n",yystack.l_mark[0]);}
485 #line 36 "code_calc.y"
486 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
489 #line 40 "code_calc.y"
490 { yyval = yystack.l_mark[-1]; }
493 #line 42 "code_calc.y"
494 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
497 #line 44 "code_calc.y"
498 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
501 #line 46 "code_calc.y"
502 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
505 #line 48 "code_calc.y"
506 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
509 #line 50 "code_calc.y"
510 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
513 #line 52 "code_calc.y"
514 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
517 #line 54 "code_calc.y"
518 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
521 #line 56 "code_calc.y"
522 { yyval = - yystack.l_mark[0]; }
525 #line 58 "code_calc.y"
526 { yyval = regs[yystack.l_mark[0]]; }
529 #line 63 "code_calc.y"
530 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
533 #line 65 "code_calc.y"
534 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
536 #line 535 "/dev/stdout"
538 yystack.s_mark -= yym;
539 yystate = *yystack.s_mark;
540 yystack.l_mark -= yym;
542 if (yystate == 0 && yym == 0)
546 printf("%sdebug: after reduction, shifting from state 0 to\
547 state %d\n", YYPREFIX, YYFINAL);
550 *++yystack.s_mark = YYFINAL;
551 *++yystack.l_mark = yyval;
554 if ((yychar = YYLEX) < 0) yychar = 0;
558 yys = yyname[YYTRANSLATE(yychar)];
559 printf("%sdebug: state %d, reading %d (%s)\n",
560 YYPREFIX, YYFINAL, yychar, yys);
564 if (yychar == 0) goto yyaccept;
567 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
568 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
569 yystate = yytable[yyn];
571 yystate = yydgoto[yym];
574 printf("%sdebug: after reduction, shifting from state %d \
575 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
577 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
581 *++yystack.s_mark = (short) yystate;
582 *++yystack.l_mark = yyval;
586 yyerror("yacc stack overflow");
589 yyfreestack(&yystack);
593 yyfreestack(&yystack);