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 ok_syntax1_parse
22 #define yylex ok_syntax1_lex
26 #define yyerror ok_syntax1_error
30 #define yychar ok_syntax1_char
34 #define yyval ok_syntax1_val
38 #define yylval ok_syntax1_lval
42 #define yydebug ok_syntax1_debug
46 #define yynerrs ok_syntax1_nerrs
50 #define yyerrflag ok_syntax1_errflag
51 #endif /* yyerrflag */
54 #define yylhs ok_syntax1_lhs
58 #define yylen ok_syntax1_len
62 #define yydefred ok_syntax1_defred
66 #define yydgoto ok_syntax1_dgoto
70 #define yysindex ok_syntax1_sindex
74 #define yyrindex ok_syntax1_rindex
78 #define yygindex ok_syntax1_gindex
82 #define yytable ok_syntax1_table
86 #define yycheck ok_syntax1_check
90 #define yyname ok_syntax1_name
94 #define yyrule ok_syntax1_rule
96 #define YYPREFIX "ok_syntax1_"
100 #line 9 "ok_syntax1.y"
106 #define YYLEX_PARAM base
107 #define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
108 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
110 static void YYERROR_DECL();
114 #undef YYSTYPE_IS_DECLARED
115 #define YYSTYPE_IS_DECLARED 1
117 #ifndef YYSTYPE_IS_DECLARED
118 #define YYSTYPE_IS_DECLARED 1
119 #line 43 "ok_syntax1.y"
126 #endif /* !YYSTYPE_IS_DECLARED */
127 #line 128 "ok_syntax1.tab.c"
129 /* compatibility with bison */
131 /* compatibility with FreeBSD */
132 # ifdef YYPARSE_PARAM_TYPE
133 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
135 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
138 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
141 /* Parameters sent to lex. */
143 # ifdef YYLEX_PARAM_TYPE
144 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
146 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
148 # define YYLEX yylex(&yylval, YYLEX_PARAM)
150 # define YYLEX_DECL() yylex(YYSTYPE *yylval, int *base)
151 # define YYLEX yylex(&yylval, base)
154 /* Parameters sent to yyerror. */
156 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
159 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
162 extern int YYPARSE_DECL();
180 #define YYERRCODE 256
182 static const YYINT ok_syntax1_lhs[] = { -1,
183 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
184 2, 2, 2, 2, 2, 2, 3, 3,
186 static const YYINT ok_syntax1_len[] = { 2,
187 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
188 3, 3, 3, 2, 1, 1, 1, 2,
190 static const YYINT ok_syntax1_defred[] = { 1,
191 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
192 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
193 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
196 static const YYINT ok_syntax1_dgoto[] = { 1,
199 static const YYINT ok_syntax1_sindex[] = { 0,
200 -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
201 -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
202 -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
205 static const YYINT ok_syntax1_rindex[] = { 0,
206 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
207 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
208 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
211 static const YYINT ok_syntax1_gindex[] = { 0,
214 #define YYTABLESIZE 220
215 static const YYINT ok_syntax1_table[] = { 6,
216 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
217 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
218 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
219 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
220 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
221 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
222 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
223 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
224 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
225 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
226 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
227 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
228 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
229 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
230 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
231 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
234 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
239 static const YYINT ok_syntax1_check[] = { 40,
240 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
241 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
242 -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
243 -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
244 -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
245 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
246 -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
247 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
248 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
249 -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
250 -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
251 -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
252 -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
253 -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
254 -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
255 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
256 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
259 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
260 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
261 -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
267 #define YYMAXTOKEN 273
268 #define YYUNDFTOKEN 279
269 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
271 static const char *const ok_syntax1_name[] = {
273 "end-of-file",0,0,0,0,0,0,"'\\a'","'\\b'","'\\t'","'\\n'","'\\v'","'\\f'",
274 "'\\r'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'#'",0,"'%'","'&'",0,"'('",
275 "')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,0,"'='",0,0,"'@'",0,0,
276 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,
277 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,"'~'","'\\177'",0,0,0,0,0,0,0,0,0,
278 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
279 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
280 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
281 "'\\377'",0,"DIGIT","LETTER","OCT1","HEX1","HEX2","HEX3","STR1",
282 "\"\\177\\177\\\\\\n\"","STR2","BELL","BS","NL","LF","CR","TAB","VT","UMINUS",0,
283 0,0,0,0,"illegal-symbol",
285 static const char *const ok_syntax1_rule[] = {
288 "list : list stat '\\n'",
289 "list : list error '\\n'",
291 "stat : LETTER '=' expr",
292 "expr : '(' expr ')'",
293 "expr : expr '+' expr",
294 "expr : expr '-' expr",
295 "expr : expr '*' expr",
296 "expr : expr '/' expr",
297 "expr : expr '%' expr",
298 "expr : expr '&' expr",
299 "expr : expr '|' expr",
304 "number : number DIGIT",
312 /* define the initial stack-sizes */
315 #define YYMAXDEPTH YYSTACKSIZE
318 #define YYSTACKSIZE YYMAXDEPTH
320 #define YYSTACKSIZE 10000
321 #define YYMAXDEPTH 10000
325 #define YYINITSTACKSIZE 200
335 #line 104 "ok_syntax1.y"
336 /* start of programs */
339 extern int YYLEX_DECL();
348 while(!feof(stdin)) {
349 yyparse(regs, &base);
354 #define UNUSED(x) ((void)(x))
359 UNUSED(regs); /* %parse-param regs is not actually used here */
360 UNUSED(base); /* %parse-param base is not actually used here */
361 fprintf(stderr, "%s\n", s);
367 /* lexical analysis routine */
368 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
369 /* return DIGIT for a digit, yylval = 0 through 9 */
370 /* all other characters are returned immediately */
374 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
376 /* c is now nonblank */
379 yylval->ival = (c - 'a');
383 yylval->ival = (c - '0') % (*base);
388 #line 389 "ok_syntax1.tab.c"
391 #include <stdio.h> /* needed for printf */
394 #include <stdlib.h> /* needed for malloc, etc */
395 #include <string.h> /* needed for memset */
397 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
398 static int yygrowstack(YYSTACKDATA *data)
405 if ((newsize = data->stacksize) == 0)
406 newsize = YYINITSTACKSIZE;
407 else if (newsize >= YYMAXDEPTH)
409 else if ((newsize *= 2) > YYMAXDEPTH)
410 newsize = YYMAXDEPTH;
412 i = (int) (data->s_mark - data->s_base);
413 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
417 data->s_base = newss;
418 data->s_mark = newss + i;
420 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
424 data->l_base = newvs;
425 data->l_mark = newvs + i;
427 data->stacksize = newsize;
428 data->s_last = data->s_base + newsize - 1;
432 #if YYPURE || defined(YY_NO_LEAKS)
433 static void yyfreestack(YYSTACKDATA *data)
437 memset(data, 0, sizeof(*data));
440 #define yyfreestack(data) /* nothing */
443 #define YYABORT goto yyabort
444 #define YYREJECT goto yyabort
445 #define YYACCEPT goto yyaccept
446 #define YYERROR goto yyerrlab
456 /* variables for the parser stack */
458 int yym, yyn, yystate;
462 if ((yys = getenv("YYDEBUG")) != 0)
465 if (yyn >= '0' && yyn <= '9')
478 memset(&yystack, 0, sizeof(yystack));
481 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
482 yystack.s_mark = yystack.s_base;
483 yystack.l_mark = yystack.l_base;
488 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
492 if (yychar < 0) yychar = YYEOF;
496 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
497 printf("%sdebug: state %d, reading %d (%s)\n",
498 YYPREFIX, yystate, yychar, yys);
502 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
503 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
507 printf("%sdebug: state %d, shifting to state %d\n",
508 YYPREFIX, yystate, yytable[yyn]);
510 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
511 yystate = yytable[yyn];
512 *++yystack.s_mark = yytable[yyn];
513 *++yystack.l_mark = yylval;
515 if (yyerrflag > 0) --yyerrflag;
518 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
519 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
524 if (yyerrflag != 0) goto yyinrecovery;
526 YYERROR_CALL("syntax error");
528 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
538 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
539 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
543 printf("%sdebug: state %d, error recovery shifting\
544 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
546 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
547 yystate = yytable[yyn];
548 *++yystack.s_mark = yytable[yyn];
549 *++yystack.l_mark = yylval;
556 printf("%sdebug: error recovery discarding state %d\n",
557 YYPREFIX, *yystack.s_mark);
559 if (yystack.s_mark <= yystack.s_base) goto yyabort;
567 if (yychar == YYEOF) goto yyabort;
571 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
572 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
573 YYPREFIX, yystate, yychar, yys);
583 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
584 YYPREFIX, yystate, yyn, yyrule[yyn]);
588 yyval = yystack.l_mark[1-yym];
590 memset(&yyval, 0, sizeof yyval);
595 #line 66 "ok_syntax1.y"
599 #line 70 "ok_syntax1.y"
600 { printf("%d\n",yystack.l_mark[0].ival);}
603 #line 72 "ok_syntax1.y"
604 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
607 #line 76 "ok_syntax1.y"
608 { yyval.ival = yystack.l_mark[-1].ival; }
611 #line 78 "ok_syntax1.y"
612 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
615 #line 80 "ok_syntax1.y"
616 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
619 #line 82 "ok_syntax1.y"
620 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
623 #line 84 "ok_syntax1.y"
624 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
627 #line 86 "ok_syntax1.y"
628 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
631 #line 88 "ok_syntax1.y"
632 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
635 #line 90 "ok_syntax1.y"
636 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
639 #line 92 "ok_syntax1.y"
640 { yyval.ival = - yystack.l_mark[0].ival; }
643 #line 94 "ok_syntax1.y"
644 { yyval.ival = regs[yystack.l_mark[0].ival]; }
647 #line 99 "ok_syntax1.y"
648 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
651 #line 101 "ok_syntax1.y"
652 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
654 #line 655 "ok_syntax1.tab.c"
656 yystack.s_mark -= yym;
657 yystate = *yystack.s_mark;
658 yystack.l_mark -= yym;
660 if (yystate == 0 && yym == 0)
664 printf("%sdebug: after reduction, shifting from state 0 to\
665 state %d\n", YYPREFIX, YYFINAL);
668 *++yystack.s_mark = YYFINAL;
669 *++yystack.l_mark = yyval;
673 if (yychar < 0) yychar = YYEOF;
677 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
678 printf("%sdebug: state %d, reading %d (%s)\n",
679 YYPREFIX, YYFINAL, yychar, yys);
683 if (yychar == YYEOF) goto yyaccept;
686 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
687 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
688 yystate = yytable[yyn];
690 yystate = yydgoto[yym];
693 printf("%sdebug: after reduction, shifting from state %d \
694 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
696 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
697 *++yystack.s_mark = (YYINT) yystate;
698 *++yystack.l_mark = yyval;
702 YYERROR_CALL("yacc stack overflow");
705 yyfreestack(&yystack);
709 yyfreestack(&yystack);