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.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();
164 #define YYERRCODE 256
166 static const YYINT quote_calc2_lhs[] = { -1,
167 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
168 2, 2, 2, 2, 2, 2, 3, 3,
170 static const YYINT quote_calc2_len[] = { 2,
171 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
172 3, 3, 3, 2, 1, 1, 1, 2,
174 static const YYINT quote_calc2_defred[] = { 1,
175 0, 0, 0, 17, 0, 0, 0, 0, 0, 3,
176 15, 0, 0, 0, 2, 0, 0, 0, 0, 0,
177 0, 0, 18, 0, 6, 0, 0, 0, 0, 0,
180 static const YYINT quote_calc2_dgoto[] = { 1,
183 static const YYINT quote_calc2_sindex[] = { 0,
184 -38, 4, -36, 0, -51, -36, 6, -121, -249, 0,
185 0, -243, -36, -23, 0, -36, -36, -36, -36, -36,
186 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
189 static const YYINT quote_calc2_rindex[] = { 0,
190 0, 0, 0, 0, -9, 0, 0, 12, -10, 0,
191 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 14, 0, -3, -2, -1, 1, 2,
195 static const YYINT quote_calc2_gindex[] = { 0,
198 #define YYTABLESIZE 259
199 static const YYINT quote_calc2_table[] = { 16,
200 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
201 10, 11, 12, 10, 16, 15, 17, 25, 18, 23,
202 19, 4, 20, 5, 21, 0, 0, 0, 0, 0,
203 16, 0, 0, 0, 0, 14, 13, 7, 8, 9,
204 0, 10, 11, 12, 12, 0, 0, 14, 0, 0,
205 0, 0, 0, 0, 24, 0, 0, 26, 27, 28,
206 29, 30, 31, 32, 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, 0, 0, 0, 0, 0,
210 22, 0, 0, 0, 0, 0, 0, 0, 0, 0,
211 0, 0, 0, 16, 15, 0, 0, 0, 14, 13,
212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
213 0, 0, 0, 0, 0, 0, 16, 0, 17, 0,
214 18, 0, 19, 0, 20, 0, 21, 0, 0, 0,
215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
216 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
221 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
222 0, 3, 0, 3, 0, 0, 0, 0, 0, 0,
223 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
224 19, 0, 20, 0, 21, 0, 0, 16, 15, 16,
225 15, 16, 15, 16, 15, 16, 15, 16, 15,
227 static const YYINT quote_calc2_check[] = { 10,
228 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
229 10, 10, 10, 10, 258, 10, 260, 41, 262, 269,
230 264, 10, 266, 10, 268, -1, -1, -1, -1, -1,
231 41, -1, -1, -1, -1, 41, 41, 41, 41, 41,
232 -1, 41, 41, 41, 3, -1, -1, 6, -1, -1,
233 -1, -1, -1, -1, 13, -1, -1, 16, 17, 18,
234 19, 20, 21, 22, -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 124, -1, -1, -1, -1, -1, -1, -1, -1, -1,
239 -1, -1, -1, 124, 124, -1, -1, -1, 124, 124,
240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
241 -1, -1, -1, -1, -1, -1, 258, -1, 260, -1,
242 262, -1, 264, -1, 266, -1, 268, -1, -1, -1,
243 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
245 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
246 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
247 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
248 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
249 -1, -1, -1, -1, -1, -1, -1, 256, -1, -1,
250 -1, 260, -1, 260, -1, -1, -1, -1, -1, -1,
251 269, 270, 269, 270, 258, -1, 260, -1, 262, -1,
252 264, -1, 266, -1, 268, -1, -1, 258, 258, 260,
253 260, 262, 262, 264, 264, 266, 266, 268, 268,
259 #define YYMAXTOKEN 271
260 #define YYUNDFTOKEN 277
261 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
263 static const char *const quote_calc2_name[] = {
265 "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,
266 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
267 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
268 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
269 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
270 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
271 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
272 0,0,0,0,0,0,"OP_ADD","\"ADD\"","OP_SUB","\"SUB\"","OP_MUL","\"MUL\"","OP_DIV",
273 "\"DIV\"","OP_MOD","\"MOD\"","OP_AND","\"AND\"","DIGIT","LETTER","UMINUS",0,0,0,
274 0,0,"illegal-symbol",
276 static const char *const quote_calc2_rule[] = {
279 "list : list stat '\\n'",
280 "list : list error '\\n'",
282 "stat : LETTER '=' expr",
283 "expr : '(' expr ')'",
284 "expr : expr \"ADD\" expr",
285 "expr : expr \"SUB\" expr",
286 "expr : expr \"MUL\" expr",
287 "expr : expr \"DIV\" expr",
288 "expr : expr \"MOD\" expr",
289 "expr : expr \"AND\" expr",
290 "expr : expr '|' expr",
291 "expr : \"SUB\" expr",
295 "number : number DIGIT",
308 /* define the initial stack-sizes */
311 #define YYMAXDEPTH YYSTACKSIZE
314 #define YYSTACKSIZE YYMAXDEPTH
316 #define YYSTACKSIZE 10000
317 #define YYMAXDEPTH 10000
321 #define YYINITSTACKSIZE 200
331 /* variables for the parser stack */
332 static YYSTACKDATA yystack;
333 #line 73 "quote_calc2.y"
334 /* start of programs */
339 while(!feof(stdin)) {
346 yyerror(const char *s)
348 fprintf(stderr, "%s\n", s);
353 /* lexical analysis routine */
354 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
355 /* return DIGIT for a digit, yylval = 0 through 9 */
356 /* all other characters are returned immediately */
360 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
362 /* c is now nonblank */
374 #line 375 "quote_calc2.tab.c"
377 #include <stdio.h> /* needed for printf */
380 #include <stdlib.h> /* needed for malloc, etc */
381 #include <string.h> /* needed for memset */
383 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
384 static int yygrowstack(YYSTACKDATA *data)
391 if ((newsize = data->stacksize) == 0)
392 newsize = YYINITSTACKSIZE;
393 else if (newsize >= YYMAXDEPTH)
395 else if ((newsize *= 2) > YYMAXDEPTH)
396 newsize = YYMAXDEPTH;
398 i = (int) (data->s_mark - data->s_base);
399 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
403 data->s_base = newss;
404 data->s_mark = newss + i;
406 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
410 data->l_base = newvs;
411 data->l_mark = newvs + i;
413 data->stacksize = newsize;
414 data->s_last = data->s_base + newsize - 1;
418 #if YYPURE || defined(YY_NO_LEAKS)
419 static void yyfreestack(YYSTACKDATA *data)
423 memset(data, 0, sizeof(*data));
426 #define yyfreestack(data) /* nothing */
429 #define YYABORT goto yyabort
430 #define YYREJECT goto yyabort
431 #define YYACCEPT goto yyaccept
432 #define YYERROR goto yyerrlab
437 int yym, yyn, yystate;
441 if ((yys = getenv("YYDEBUG")) != 0)
444 if (yyn >= '0' && yyn <= '9')
457 memset(&yystack, 0, sizeof(yystack));
460 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
461 yystack.s_mark = yystack.s_base;
462 yystack.l_mark = yystack.l_base;
467 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
471 if (yychar < 0) yychar = YYEOF;
475 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
476 printf("%sdebug: state %d, reading %d (%s)\n",
477 YYPREFIX, yystate, yychar, yys);
481 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
482 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
486 printf("%sdebug: state %d, shifting to state %d\n",
487 YYPREFIX, yystate, yytable[yyn]);
489 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
490 yystate = yytable[yyn];
491 *++yystack.s_mark = yytable[yyn];
492 *++yystack.l_mark = yylval;
494 if (yyerrflag > 0) --yyerrflag;
497 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
498 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
503 if (yyerrflag != 0) goto yyinrecovery;
505 YYERROR_CALL("syntax error");
507 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
517 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
518 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
522 printf("%sdebug: state %d, error recovery shifting\
523 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
525 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
526 yystate = yytable[yyn];
527 *++yystack.s_mark = yytable[yyn];
528 *++yystack.l_mark = yylval;
535 printf("%sdebug: error recovery discarding state %d\n",
536 YYPREFIX, *yystack.s_mark);
538 if (yystack.s_mark <= yystack.s_base) goto yyabort;
546 if (yychar == YYEOF) goto yyabort;
550 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
551 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
552 YYPREFIX, yystate, yychar, yys);
562 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
563 YYPREFIX, yystate, yyn, yyrule[yyn]);
567 yyval = yystack.l_mark[1-yym];
569 memset(&yyval, 0, sizeof yyval);
574 #line 35 "quote_calc2.y"
578 #line 39 "quote_calc2.y"
579 { printf("%d\n",yystack.l_mark[0]);}
582 #line 41 "quote_calc2.y"
583 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
586 #line 45 "quote_calc2.y"
587 { yyval = yystack.l_mark[-1]; }
590 #line 47 "quote_calc2.y"
591 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
594 #line 49 "quote_calc2.y"
595 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
598 #line 51 "quote_calc2.y"
599 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
602 #line 53 "quote_calc2.y"
603 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
606 #line 55 "quote_calc2.y"
607 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
610 #line 57 "quote_calc2.y"
611 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
614 #line 59 "quote_calc2.y"
615 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
618 #line 61 "quote_calc2.y"
619 { yyval = - yystack.l_mark[0]; }
622 #line 63 "quote_calc2.y"
623 { yyval = regs[yystack.l_mark[0]]; }
626 #line 68 "quote_calc2.y"
627 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
630 #line 70 "quote_calc2.y"
631 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
633 #line 634 "quote_calc2.tab.c"
635 yystack.s_mark -= yym;
636 yystate = *yystack.s_mark;
637 yystack.l_mark -= yym;
639 if (yystate == 0 && yym == 0)
643 printf("%sdebug: after reduction, shifting from state 0 to\
644 state %d\n", YYPREFIX, YYFINAL);
647 *++yystack.s_mark = YYFINAL;
648 *++yystack.l_mark = yyval;
652 if (yychar < 0) yychar = YYEOF;
656 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
657 printf("%sdebug: state %d, reading %d (%s)\n",
658 YYPREFIX, YYFINAL, yychar, yys);
662 if (yychar == YYEOF) goto yyaccept;
665 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
666 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
667 yystate = yytable[yyn];
669 yystate = yydgoto[yym];
672 printf("%sdebug: after reduction, shifting from state %d \
673 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
675 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
676 *++yystack.s_mark = (YYINT) yystate;
677 *++yystack.l_mark = yyval;
681 YYERROR_CALL("yacc stack overflow");
684 yyfreestack(&yystack);
688 yyfreestack(&yystack);