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_calc_parse
22 #define yylex quote_calc_lex
26 #define yyerror quote_calc_error
30 #define yychar quote_calc_char
34 #define yyval quote_calc_val
38 #define yylval quote_calc_lval
42 #define yydebug quote_calc_debug
46 #define yynerrs quote_calc_nerrs
50 #define yyerrflag quote_calc_errflag
51 #endif /* yyerrflag */
54 #define yylhs quote_calc_lhs
58 #define yylen quote_calc_len
62 #define yydefred quote_calc_defred
66 #define yydgoto quote_calc_dgoto
70 #define yysindex quote_calc_sindex
74 #define yyrindex quote_calc_rindex
78 #define yygindex quote_calc_gindex
82 #define yytable quote_calc_table
86 #define yycheck quote_calc_check
90 #define yyname quote_calc_name
94 #define yyrule quote_calc_rule
96 #define YYPREFIX "quote_calc_"
100 #line 2 "quote_calc.y"
108 static void yyerror(const char *s);
110 #line 111 "quote_calc-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_calc_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_calc_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_calc_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_calc_dgoto[] = { 1,
177 static const YYINT quote_calc_sindex[] = { 0,
178 -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
179 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
180 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
183 static const YYINT quote_calc_rindex[] = { 0,
184 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
185 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
186 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
189 static const YYINT quote_calc_gindex[] = { 0,
192 #define YYTABLESIZE 258
193 static const YYINT quote_calc_table[] = { 16,
194 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
195 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
196 23, 20, 4, 21, 5, 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 0, 22, 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, 16, 0, 17, 0, 18,
208 0, 19, 0, 20, 0, 21, 0, 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 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
217 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
218 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
219 16, 15, 16, 15, 16, 15, 16, 15,
221 static const YYINT quote_calc_check[] = { 10,
222 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
223 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
224 269, 265, 10, 267, 10, -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 -1, 124, -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, 257, -1, 259, -1, 261,
236 -1, 263, -1, 265, -1, 267, -1, -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 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
245 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
246 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
247 261, 261, 263, 263, 265, 265, 267, 267,
253 #define YYMAXTOKEN 271
254 #define YYUNDFTOKEN 277
255 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
257 static const char *const quote_calc_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_calc_rule[] = {
273 "list : list stat '\\n'",
274 "list : list error '\\n'",
276 "stat : LETTER '=' expr",
277 "expr : '(' expr ')'",
278 "expr : expr OP_ADD expr",
279 "expr : expr OP_SUB expr",
280 "expr : expr OP_MUL expr",
281 "expr : expr OP_DIV expr",
282 "expr : expr OP_MOD expr",
283 "expr : expr OP_AND expr",
284 "expr : expr '|' expr",
285 "expr : OP_SUB expr",
289 "number : number DIGIT",
304 /* define the initial stack-sizes */
307 #define YYMAXDEPTH YYSTACKSIZE
310 #define YYSTACKSIZE YYMAXDEPTH
312 #define YYSTACKSIZE 10000
313 #define YYMAXDEPTH 10000
317 #define YYINITSTACKSIZE 200
327 /* variables for the parser stack */
328 static YYSTACKDATA yystack;
329 #line 73 "quote_calc.y"
330 /* start of programs */
335 while(!feof(stdin)) {
342 yyerror(const char *s)
344 fprintf(stderr, "%s\n", s);
349 /* lexical analysis routine */
350 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
351 /* return DIGIT for a digit, yylval = 0 through 9 */
352 /* all other characters are returned immediately */
356 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
358 /* c is now nonblank */
370 #line 371 "quote_calc-s.tab.c"
373 #include <stdio.h> /* needed for printf */
376 #include <stdlib.h> /* needed for malloc, etc */
377 #include <string.h> /* needed for memset */
379 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
380 static int yygrowstack(YYSTACKDATA *data)
387 if ((newsize = data->stacksize) == 0)
388 newsize = YYINITSTACKSIZE;
389 else if (newsize >= YYMAXDEPTH)
391 else if ((newsize *= 2) > YYMAXDEPTH)
392 newsize = YYMAXDEPTH;
394 i = (int) (data->s_mark - data->s_base);
395 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
399 data->s_base = newss;
400 data->s_mark = newss + i;
402 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
406 data->l_base = newvs;
407 data->l_mark = newvs + i;
409 data->stacksize = newsize;
410 data->s_last = data->s_base + newsize - 1;
414 #if YYPURE || defined(YY_NO_LEAKS)
415 static void yyfreestack(YYSTACKDATA *data)
419 memset(data, 0, sizeof(*data));
422 #define yyfreestack(data) /* nothing */
425 #define YYABORT goto yyabort
426 #define YYREJECT goto yyabort
427 #define YYACCEPT goto yyaccept
428 #define YYERROR goto yyerrlab
433 int yym, yyn, yystate;
437 if ((yys = getenv("YYDEBUG")) != 0)
440 if (yyn >= '0' && yyn <= '9')
453 memset(&yystack, 0, sizeof(yystack));
456 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
457 yystack.s_mark = yystack.s_base;
458 yystack.l_mark = yystack.l_base;
463 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
467 if (yychar < 0) yychar = YYEOF;
471 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
472 printf("%sdebug: state %d, reading %d (%s)\n",
473 YYPREFIX, yystate, yychar, yys);
477 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
478 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
482 printf("%sdebug: state %d, shifting to state %d\n",
483 YYPREFIX, yystate, yytable[yyn]);
485 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
486 yystate = yytable[yyn];
487 *++yystack.s_mark = yytable[yyn];
488 *++yystack.l_mark = yylval;
490 if (yyerrflag > 0) --yyerrflag;
493 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
494 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
499 if (yyerrflag != 0) goto yyinrecovery;
501 YYERROR_CALL("syntax error");
503 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
513 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
514 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
518 printf("%sdebug: state %d, error recovery shifting\
519 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
521 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
522 yystate = yytable[yyn];
523 *++yystack.s_mark = yytable[yyn];
524 *++yystack.l_mark = yylval;
531 printf("%sdebug: error recovery discarding state %d\n",
532 YYPREFIX, *yystack.s_mark);
534 if (yystack.s_mark <= yystack.s_base) goto yyabort;
542 if (yychar == YYEOF) goto yyabort;
546 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
547 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
548 YYPREFIX, yystate, yychar, yys);
558 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
559 YYPREFIX, yystate, yyn, yyrule[yyn]);
563 yyval = yystack.l_mark[1-yym];
565 memset(&yyval, 0, sizeof yyval);
570 #line 35 "quote_calc.y"
574 #line 39 "quote_calc.y"
575 { printf("%d\n",yystack.l_mark[0]);}
578 #line 41 "quote_calc.y"
579 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
582 #line 45 "quote_calc.y"
583 { yyval = yystack.l_mark[-1]; }
586 #line 47 "quote_calc.y"
587 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
590 #line 49 "quote_calc.y"
591 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
594 #line 51 "quote_calc.y"
595 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
598 #line 53 "quote_calc.y"
599 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
602 #line 55 "quote_calc.y"
603 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
606 #line 57 "quote_calc.y"
607 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
610 #line 59 "quote_calc.y"
611 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
614 #line 61 "quote_calc.y"
615 { yyval = - yystack.l_mark[0]; }
618 #line 63 "quote_calc.y"
619 { yyval = regs[yystack.l_mark[0]]; }
622 #line 68 "quote_calc.y"
623 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
626 #line 70 "quote_calc.y"
627 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
629 #line 630 "quote_calc-s.tab.c"
631 yystack.s_mark -= yym;
632 yystate = *yystack.s_mark;
633 yystack.l_mark -= yym;
635 if (yystate == 0 && yym == 0)
639 printf("%sdebug: after reduction, shifting from state 0 to\
640 state %d\n", YYPREFIX, YYFINAL);
643 *++yystack.s_mark = YYFINAL;
644 *++yystack.l_mark = yyval;
648 if (yychar < 0) yychar = YYEOF;
652 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
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]) != 0) && (yyn += yystate) >= 0 &&
662 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) 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) goto yyoverflow;
672 *++yystack.s_mark = (YYINT) yystate;
673 *++yystack.l_mark = yyval;
677 YYERROR_CALL("yacc stack overflow");
680 yyfreestack(&yystack);
684 yyfreestack(&yystack);