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_calc3_parse
22 #define yylex quote_calc3_lex
26 #define yyerror quote_calc3_error
30 #define yychar quote_calc3_char
34 #define yyval quote_calc3_val
38 #define yylval quote_calc3_lval
42 #define yydebug quote_calc3_debug
46 #define yynerrs quote_calc3_nerrs
50 #define yyerrflag quote_calc3_errflag
51 #endif /* yyerrflag */
54 #define yylhs quote_calc3_lhs
58 #define yylen quote_calc3_len
62 #define yydefred quote_calc3_defred
66 #define yydgoto quote_calc3_dgoto
70 #define yysindex quote_calc3_sindex
74 #define yyrindex quote_calc3_rindex
78 #define yygindex quote_calc3_gindex
82 #define yytable quote_calc3_table
86 #define yycheck quote_calc3_check
90 #define yyname quote_calc3_name
94 #define yyrule quote_calc3_rule
96 #define YYPREFIX "quote_calc3_"
100 #line 2 "quote_calc3.y"
108 static void yyerror(const char *s);
110 #line 111 "quote_calc3.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_calc3_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_calc3_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_calc3_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_calc3_dgoto[] = { 1,
177 static const YYINT quote_calc3_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_calc3_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_calc3_gindex[] = { 0,
192 #define YYTABLESIZE 258
193 static const YYINT quote_calc3_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_calc3_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_calc3_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-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
267 "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
268 "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
271 static const char *const quote_calc3_rule[] = {
274 "list : list stat '\\n'",
275 "list : list error '\\n'",
277 "stat : LETTER '=' expr",
278 "expr : '(' expr ')'",
279 "expr : expr OP_ADD expr",
280 "expr : expr OP_SUB expr",
281 "expr : expr OP_MUL expr",
282 "expr : expr OP_DIV expr",
283 "expr : expr OP_MOD expr",
284 "expr : expr OP_AND expr",
285 "expr : expr '|' expr",
286 "expr : OP_SUB expr",
290 "number : number DIGIT",
305 /* define the initial stack-sizes */
308 #define YYMAXDEPTH YYSTACKSIZE
311 #define YYSTACKSIZE YYMAXDEPTH
313 #define YYSTACKSIZE 10000
314 #define YYMAXDEPTH 10000
318 #define YYINITSTACKSIZE 200
328 /* variables for the parser stack */
329 static YYSTACKDATA yystack;
330 #line 73 "quote_calc3.y"
331 /* start of programs */
336 while(!feof(stdin)) {
343 yyerror(const char *s)
345 fprintf(stderr, "%s\n", s);
350 /* lexical analysis routine */
351 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
352 /* return DIGIT for a digit, yylval = 0 through 9 */
353 /* all other characters are returned immediately */
357 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
359 /* c is now nonblank */
371 #line 372 "quote_calc3.tab.c"
374 #include <stdio.h> /* needed for printf */
377 #include <stdlib.h> /* needed for malloc, etc */
378 #include <string.h> /* needed for memset */
380 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
381 static int yygrowstack(YYSTACKDATA *data)
388 if ((newsize = data->stacksize) == 0)
389 newsize = YYINITSTACKSIZE;
390 else if (newsize >= YYMAXDEPTH)
392 else if ((newsize *= 2) > YYMAXDEPTH)
393 newsize = YYMAXDEPTH;
395 i = (int) (data->s_mark - data->s_base);
396 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
400 data->s_base = newss;
401 data->s_mark = newss + i;
403 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
407 data->l_base = newvs;
408 data->l_mark = newvs + i;
410 data->stacksize = newsize;
411 data->s_last = data->s_base + newsize - 1;
415 #if YYPURE || defined(YY_NO_LEAKS)
416 static void yyfreestack(YYSTACKDATA *data)
420 memset(data, 0, sizeof(*data));
423 #define yyfreestack(data) /* nothing */
426 #define YYABORT goto yyabort
427 #define YYREJECT goto yyabort
428 #define YYACCEPT goto yyaccept
429 #define YYERROR goto yyerrlab
434 int yym, yyn, yystate;
438 if ((yys = getenv("YYDEBUG")) != 0)
441 if (yyn >= '0' && yyn <= '9')
454 memset(&yystack, 0, sizeof(yystack));
457 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
458 yystack.s_mark = yystack.s_base;
459 yystack.l_mark = yystack.l_base;
464 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
468 if (yychar < 0) yychar = YYEOF;
472 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
473 printf("%sdebug: state %d, reading %d (%s)\n",
474 YYPREFIX, yystate, yychar, yys);
478 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
479 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
483 printf("%sdebug: state %d, shifting to state %d\n",
484 YYPREFIX, yystate, yytable[yyn]);
486 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
487 yystate = yytable[yyn];
488 *++yystack.s_mark = yytable[yyn];
489 *++yystack.l_mark = yylval;
491 if (yyerrflag > 0) --yyerrflag;
494 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
495 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
500 if (yyerrflag != 0) goto yyinrecovery;
502 YYERROR_CALL("syntax error");
504 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
514 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
515 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
519 printf("%sdebug: state %d, error recovery shifting\
520 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
522 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
523 yystate = yytable[yyn];
524 *++yystack.s_mark = yytable[yyn];
525 *++yystack.l_mark = yylval;
532 printf("%sdebug: error recovery discarding state %d\n",
533 YYPREFIX, *yystack.s_mark);
535 if (yystack.s_mark <= yystack.s_base) goto yyabort;
543 if (yychar == YYEOF) goto yyabort;
547 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
548 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
549 YYPREFIX, yystate, yychar, yys);
559 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
560 YYPREFIX, yystate, yyn, yyrule[yyn]);
564 yyval = yystack.l_mark[1-yym];
566 memset(&yyval, 0, sizeof yyval);
571 #line 35 "quote_calc3.y"
575 #line 39 "quote_calc3.y"
576 { printf("%d\n",yystack.l_mark[0]);}
579 #line 41 "quote_calc3.y"
580 { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
583 #line 45 "quote_calc3.y"
584 { yyval = yystack.l_mark[-1]; }
587 #line 47 "quote_calc3.y"
588 { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
591 #line 49 "quote_calc3.y"
592 { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
595 #line 51 "quote_calc3.y"
596 { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
599 #line 53 "quote_calc3.y"
600 { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
603 #line 55 "quote_calc3.y"
604 { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
607 #line 57 "quote_calc3.y"
608 { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
611 #line 59 "quote_calc3.y"
612 { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
615 #line 61 "quote_calc3.y"
616 { yyval = - yystack.l_mark[0]; }
619 #line 63 "quote_calc3.y"
620 { yyval = regs[yystack.l_mark[0]]; }
623 #line 68 "quote_calc3.y"
624 { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
627 #line 70 "quote_calc3.y"
628 { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
630 #line 631 "quote_calc3.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;
649 if (yychar < 0) yychar = YYEOF;
653 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
654 printf("%sdebug: state %d, reading %d (%s)\n",
655 YYPREFIX, YYFINAL, yychar, yys);
659 if (yychar == YYEOF) goto yyaccept;
662 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
663 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
664 yystate = yytable[yyn];
666 yystate = yydgoto[yym];
669 printf("%sdebug: after reduction, shifting from state %d \
670 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
672 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
673 *++yystack.s_mark = (YYINT) yystate;
674 *++yystack.l_mark = yyval;
678 YYERROR_CALL("yacc stack overflow");
681 yyfreestack(&yystack);
685 yyfreestack(&yystack);