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.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_calc_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_calc_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_calc_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_calc_dgoto[] = { 1,
183 static const YYINT quote_calc_sindex[] = { 0,
184 -38, 5, -36, 0, -51, -36, 7, -121, -248, 0,
185 0, -243, -36, -22, 0, -36, -36, -36, -36, -36,
186 -36, -36, 0, -121, 0, -121, -121, -121, -121, -121,
189 static const YYINT quote_calc_rindex[] = { 0,
190 0, 0, 0, 0, -9, 0, 0, 13, -10, 0,
191 0, -5, 0, 0, 0, 0, 0, 0, 0, 0,
192 0, 0, 0, 15, 0, -3, -2, -1, 1, 2,
195 static const YYINT quote_calc_gindex[] = { 0,
198 #define YYTABLESIZE 258
199 static const YYINT quote_calc_table[] = { 16,
200 15, 6, 22, 6, 14, 13, 7, 8, 9, 13,
201 10, 11, 12, 16, 10, 17, 15, 18, 25, 19,
202 23, 20, 4, 21, 5, 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 0, 22, 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, 16, 0, 17, 0, 18,
214 0, 19, 0, 20, 0, 21, 0, 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 3, 0, 3, 0, 0, 0, 0, 0, 0, 0,
223 4, 5, 4, 11, 16, 0, 17, 0, 18, 0,
224 19, 0, 20, 0, 21, 0, 16, 15, 16, 15,
225 16, 15, 16, 15, 16, 15, 16, 15,
227 static const YYINT quote_calc_check[] = { 10,
228 10, 40, 124, 40, 10, 10, 10, 10, 10, 61,
229 10, 10, 10, 257, 10, 259, 10, 261, 41, 263,
230 269, 265, 10, 267, 10, -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 -1, 124, -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, 257, -1, 259, -1, 261,
242 -1, 263, -1, 265, -1, 267, -1, -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 259, -1, 259, -1, -1, -1, -1, -1, -1, -1,
251 269, 270, 269, 270, 257, -1, 259, -1, 261, -1,
252 263, -1, 265, -1, 267, -1, 257, 257, 259, 259,
253 261, 261, 263, 263, 265, 265, 267, 267,
259 #define YYMAXTOKEN 271
260 #define YYUNDFTOKEN 277
261 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
263 static const char *const quote_calc_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_calc_rule[] = {
279 "list : list stat '\\n'",
280 "list : list error '\\n'",
282 "stat : LETTER '=' expr",
283 "expr : '(' expr ')'",
284 "expr : expr OP_ADD expr",
285 "expr : expr OP_SUB expr",
286 "expr : expr OP_MUL expr",
287 "expr : expr OP_DIV expr",
288 "expr : expr OP_MOD expr",
289 "expr : expr OP_AND expr",
290 "expr : expr '|' expr",
291 "expr : OP_SUB expr",
295 "number : number DIGIT",
310 /* define the initial stack-sizes */
313 #define YYMAXDEPTH YYSTACKSIZE
316 #define YYSTACKSIZE YYMAXDEPTH
318 #define YYSTACKSIZE 10000
319 #define YYMAXDEPTH 10000
323 #define YYINITSTACKSIZE 200
333 /* variables for the parser stack */
334 static YYSTACKDATA yystack;
335 #line 73 "quote_calc.y"
336 /* start of programs */
341 while(!feof(stdin)) {
348 yyerror(const char *s)
350 fprintf(stderr, "%s\n", s);
355 /* lexical analysis routine */
356 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
357 /* return DIGIT for a digit, yylval = 0 through 9 */
358 /* all other characters are returned immediately */
362 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
364 /* c is now nonblank */
376 #line 377 "quote_calc.tab.c"
379 #include <stdio.h> /* needed for printf */
382 #include <stdlib.h> /* needed for malloc, etc */
383 #include <string.h> /* needed for memset */
385 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
386 static int yygrowstack(YYSTACKDATA *data)
393 if ((newsize = data->stacksize) == 0)
394 newsize = YYINITSTACKSIZE;
395 else if (newsize >= YYMAXDEPTH)
397 else if ((newsize *= 2) > YYMAXDEPTH)
398 newsize = YYMAXDEPTH;
400 i = (int) (data->s_mark - data->s_base);
401 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
405 data->s_base = newss;
406 data->s_mark = newss + i;
408 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
412 data->l_base = newvs;
413 data->l_mark = newvs + i;
415 data->stacksize = newsize;
416 data->s_last = data->s_base + newsize - 1;
420 #if YYPURE || defined(YY_NO_LEAKS)
421 static void yyfreestack(YYSTACKDATA *data)
425 memset(data, 0, sizeof(*data));
428 #define yyfreestack(data) /* nothing */
431 #define YYABORT goto yyabort
432 #define YYREJECT goto yyabort
433 #define YYACCEPT goto yyaccept
434 #define YYERROR goto yyerrlab
439 int yym, yyn, yystate;
443 if ((yys = getenv("YYDEBUG")) != 0)
446 if (yyn >= '0' && yyn <= '9')
459 memset(&yystack, 0, sizeof(yystack));
462 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
463 yystack.s_mark = yystack.s_base;
464 yystack.l_mark = yystack.l_base;
469 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
473 if (yychar < 0) yychar = YYEOF;
477 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
478 printf("%sdebug: state %d, reading %d (%s)\n",
479 YYPREFIX, yystate, yychar, yys);
483 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
484 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
488 printf("%sdebug: state %d, shifting to state %d\n",
489 YYPREFIX, yystate, yytable[yyn]);
491 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
492 yystate = yytable[yyn];
493 *++yystack.s_mark = yytable[yyn];
494 *++yystack.l_mark = yylval;
496 if (yyerrflag > 0) --yyerrflag;
499 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
500 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
505 if (yyerrflag != 0) goto yyinrecovery;
507 YYERROR_CALL("syntax error");
509 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
519 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
520 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
524 printf("%sdebug: state %d, error recovery shifting\
525 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
527 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
528 yystate = yytable[yyn];
529 *++yystack.s_mark = yytable[yyn];
530 *++yystack.l_mark = yylval;
537 printf("%sdebug: error recovery discarding state %d\n",
538 YYPREFIX, *yystack.s_mark);
540 if (yystack.s_mark <= yystack.s_base) goto yyabort;
548 if (yychar == YYEOF) goto yyabort;
552 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
553 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
554 YYPREFIX, yystate, yychar, yys);
564 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
565 YYPREFIX, yystate, yyn, yyrule[yyn]);
569 yyval = yystack.l_mark[1-yym];
571 memset(&yyval, 0, sizeof yyval);
576 #line 35 "quote_calc.y"
580 #line 39 "quote_calc.y"
581 { printf("%d\n",yystack.l_mark[0]);}
584 #line 41 "quote_calc.y"
585 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
588 #line 45 "quote_calc.y"
589 { yyval = yystack.l_mark[-1]; }
592 #line 47 "quote_calc.y"
593 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
596 #line 49 "quote_calc.y"
597 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
600 #line 51 "quote_calc.y"
601 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
604 #line 53 "quote_calc.y"
605 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
608 #line 55 "quote_calc.y"
609 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
612 #line 57 "quote_calc.y"
613 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
616 #line 59 "quote_calc.y"
617 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
620 #line 61 "quote_calc.y"
621 { yyval = - yystack.l_mark[0]; }
624 #line 63 "quote_calc.y"
625 { yyval = regs[yystack.l_mark[0]]; }
628 #line 68 "quote_calc.y"
629 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
632 #line 70 "quote_calc.y"
633 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
635 #line 636 "quote_calc.tab.c"
637 yystack.s_mark -= yym;
638 yystate = *yystack.s_mark;
639 yystack.l_mark -= yym;
641 if (yystate == 0 && yym == 0)
645 printf("%sdebug: after reduction, shifting from state 0 to\
646 state %d\n", YYPREFIX, YYFINAL);
649 *++yystack.s_mark = YYFINAL;
650 *++yystack.l_mark = yyval;
654 if (yychar < 0) yychar = YYEOF;
658 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
659 printf("%sdebug: state %d, reading %d (%s)\n",
660 YYPREFIX, YYFINAL, yychar, yys);
664 if (yychar == YYEOF) goto yyaccept;
667 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
668 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
669 yystate = yytable[yyn];
671 yystate = yydgoto[yym];
674 printf("%sdebug: after reduction, shifting from state %d \
675 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
677 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
678 *++yystack.s_mark = (YYINT) yystate;
679 *++yystack.l_mark = yyval;
683 YYERROR_CALL("yacc stack overflow");
686 yyfreestack(&yystack);
690 yyfreestack(&yystack);