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 quote_calc2_parse
22 #define yylex quote_calc2_lex
26 #define yyerror quote_calc2_error
30 #define yychar quote_calc2_char
34 #define yyval quote_calc2_val
38 #define yylval quote_calc2_lval
42 #define yydebug quote_calc2_debug
46 #define yynerrs quote_calc2_nerrs
50 #define yyerrflag quote_calc2_errflag
51 #endif /* yyerrflag */
54 #define yylhs quote_calc2_lhs
58 #define yylen quote_calc2_len
62 #define yydefred quote_calc2_defred
66 #define yydgoto quote_calc2_dgoto
70 #define yysindex quote_calc2_sindex
74 #define yyrindex quote_calc2_rindex
78 #define yygindex quote_calc2_gindex
82 #define yytable quote_calc2_table
86 #define yycheck quote_calc2_check
90 #define yyname quote_calc2_name
94 #define yyrule quote_calc2_rule
96 #define YYPREFIX "quote_calc2_"
100 #line 2 "quote_calc2.y"
108 static void yyerror(const char *s);
110 #line 111 "quote_calc2-s.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();
158 #define YYERRCODE 256
160 static const YYINT quote_calc2_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 quote_calc2_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 quote_calc2_defred[] = { 1,
169 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
170 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
171 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
174 static const YYINT quote_calc2_dgoto[] = { 1,
177 static const YYINT quote_calc2_sindex[] = { 0,
178 -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
179 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
180 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
183 static const YYINT quote_calc2_rindex[] = { 0,
184 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
185 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
186 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
189 static const YYINT quote_calc2_gindex[] = { 0,
192 #define YYTABLESIZE 259
193 static const YYINT quote_calc2_table[] = { 16,
194 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
195 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
196 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
197 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
198 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
199 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
200 29, 30, 31, 32, 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 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
208 18, 0, 19, 0, 20, 0, 21, 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, 0, 0, 2, 0, 0,
216 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
217 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
218 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
219 15, 16, 15, 16, 15, 16, 15, 16, 15,
221 static const YYINT quote_calc2_check[] = { 10,
222 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
223 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
224 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
225 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
226 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
227 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
228 19, 20, 21, 22, -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 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
233 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
235 -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
236 262, -1, 264, -1, 266, -1, 268, -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, -1, -1, -1, -1, -1,
240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
241 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
242 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
243 -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
244 -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
245 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
246 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
247 260, 262, 262, 264, 264, 266, 266, 268, 268,
253 #define YYMAXTOKEN 271
254 #define YYUNDFTOKEN 277
255 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
257 static const char *const quote_calc2_name[] = {
259 "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,
260 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
261 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
262 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
263 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
264 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
266 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
267 "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
268 0,0,"illegal-symbol",
270 static const char *const quote_calc2_rule[] = {
273 "list : list stat '\\n'",
274 "list : list error '\\n'",
276 "stat : LETTER '=' expr",
277 "expr : '(' expr ')'",
278 "expr : expr \"ADD\" expr",
279 "expr : expr \"SUB\" expr",
280 "expr : expr \"MUL\" expr",
281 "expr : expr \"DIV\" expr",
282 "expr : expr \"MOD\" expr",
283 "expr : expr \"AND\" expr",
284 "expr : expr '|' expr",
285 "expr : \"SUB\" expr",
289 "number : number DIGIT",
302 /* define the initial stack-sizes */
305 #define YYMAXDEPTH YYSTACKSIZE
308 #define YYSTACKSIZE YYMAXDEPTH
310 #define YYSTACKSIZE 10000
311 #define YYMAXDEPTH 10000
315 #define YYINITSTACKSIZE 200
325 /* variables for the parser stack */
326 static YYSTACKDATA yystack;
327 #line 73 "quote_calc2.y"
328 /* start of programs */
333 while(!feof(stdin)) {
340 yyerror(const char *s)
342 fprintf(stderr, "%s\n", s);
347 /* lexical analysis routine */
348 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
349 /* return DIGIT for a digit, yylval = 0 through 9 */
350 /* all other characters are returned immediately */
354 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
356 /* c is now nonblank */
368 #line 369 "quote_calc2-s.tab.c"
371 #include <stdio.h> /* needed for printf */
374 #include <stdlib.h> /* needed for malloc, etc */
375 #include <string.h> /* needed for memset */
377 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
378 static int yygrowstack(YYSTACKDATA *data)
385 if ((newsize = data->stacksize) == 0)
386 newsize = YYINITSTACKSIZE;
387 else if (newsize >= YYMAXDEPTH)
389 else if ((newsize *= 2) > YYMAXDEPTH)
390 newsize = YYMAXDEPTH;
392 i = (int) (data->s_mark - data->s_base);
393 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
397 data->s_base = newss;
398 data->s_mark = newss + i;
400 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
404 data->l_base = newvs;
405 data->l_mark = newvs + i;
407 data->stacksize = newsize;
408 data->s_last = data->s_base + newsize - 1;
412 #if YYPURE || defined(YY_NO_LEAKS)
413 static void yyfreestack(YYSTACKDATA *data)
417 memset(data, 0, sizeof(*data));
420 #define yyfreestack(data) /* nothing */
423 #define YYABORT goto yyabort
424 #define YYREJECT goto yyabort
425 #define YYACCEPT goto yyaccept
426 #define YYERROR goto yyerrlab
431 int yym, yyn, yystate;
435 if ((yys = getenv("YYDEBUG")) != 0)
438 if (yyn >= '0' && yyn <= '9')
449 memset(&yystack, 0, sizeof(yystack));
452 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
453 yystack.s_mark = yystack.s_base;
454 yystack.l_mark = yystack.l_base;
459 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
462 if ((yychar = YYLEX) < 0) yychar = YYEOF;
466 yys = yyname[YYTRANSLATE(yychar)];
467 printf("%sdebug: state %d, reading %d (%s)\n",
468 YYPREFIX, yystate, yychar, yys);
472 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
473 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
477 printf("%sdebug: state %d, shifting to state %d\n",
478 YYPREFIX, yystate, yytable[yyn]);
480 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
484 yystate = yytable[yyn];
485 *++yystack.s_mark = yytable[yyn];
486 *++yystack.l_mark = yylval;
488 if (yyerrflag > 0) --yyerrflag;
491 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
492 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
497 if (yyerrflag) goto yyinrecovery;
499 YYERROR_CALL("syntax error");
512 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
513 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
517 printf("%sdebug: state %d, error recovery shifting\
518 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
520 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
524 yystate = yytable[yyn];
525 *++yystack.s_mark = yytable[yyn];
526 *++yystack.l_mark = yylval;
533 printf("%sdebug: error recovery discarding state %d\n",
534 YYPREFIX, *yystack.s_mark);
536 if (yystack.s_mark <= yystack.s_base) goto yyabort;
544 if (yychar == YYEOF) goto yyabort;
548 yys = yyname[YYTRANSLATE(yychar)];
549 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
550 YYPREFIX, yystate, yychar, yys);
560 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
561 YYPREFIX, yystate, yyn, yyrule[yyn]);
565 yyval = yystack.l_mark[1-yym];
567 memset(&yyval, 0, sizeof yyval);
571 #line 35 "quote_calc2.y"
575 #line 39 "quote_calc2.y"
576 { printf("%d\n",yystack.l_mark[0]);}
579 #line 41 "quote_calc2.y"
580 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
583 #line 45 "quote_calc2.y"
584 { yyval = yystack.l_mark[-1]; }
587 #line 47 "quote_calc2.y"
588 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
591 #line 49 "quote_calc2.y"
592 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
595 #line 51 "quote_calc2.y"
596 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
599 #line 53 "quote_calc2.y"
600 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
603 #line 55 "quote_calc2.y"
604 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
607 #line 57 "quote_calc2.y"
608 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
611 #line 59 "quote_calc2.y"
612 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
615 #line 61 "quote_calc2.y"
616 { yyval = - yystack.l_mark[0]; }
619 #line 63 "quote_calc2.y"
620 { yyval = regs[yystack.l_mark[0]]; }
623 #line 68 "quote_calc2.y"
624 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
627 #line 70 "quote_calc2.y"
628 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
630 #line 631 "quote_calc2-s.tab.c"
632 yystack.s_mark -= yym;
633 yystate = *yystack.s_mark;
634 yystack.l_mark -= yym;
636 if (yystate == 0 && yym == 0)
640 printf("%sdebug: after reduction, shifting from state 0 to\
641 state %d\n", YYPREFIX, YYFINAL);
644 *++yystack.s_mark = YYFINAL;
645 *++yystack.l_mark = yyval;
648 if ((yychar = YYLEX) < 0) yychar = YYEOF;
652 yys = yyname[YYTRANSLATE(yychar)];
653 printf("%sdebug: state %d, reading %d (%s)\n",
654 YYPREFIX, YYFINAL, yychar, yys);
658 if (yychar == YYEOF) goto yyaccept;
661 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
662 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
663 yystate = yytable[yyn];
665 yystate = yydgoto[yym];
668 printf("%sdebug: after reduction, shifting from state %d \
669 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
671 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
675 *++yystack.s_mark = (YYINT) yystate;
676 *++yystack.l_mark = yyval;
680 YYERROR_CALL("yacc stack overflow");
683 yyfreestack(&yystack);
687 yyfreestack(&yystack);