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",
313 /* define the initial stack-sizes */
316 #define YYMAXDEPTH YYSTACKSIZE
319 #define YYSTACKSIZE YYMAXDEPTH
321 #define YYSTACKSIZE 10000
322 #define YYMAXDEPTH 10000
326 #define YYINITSTACKSIZE 200
336 #line 104 "ok_syntax1.y"
337 /* start of programs */
340 extern int YYLEX_DECL();
349 while(!feof(stdin)) {
350 yyparse(regs, &base);
355 #define UNUSED(x) ((void)(x))
360 UNUSED(regs); /* %parse-param regs is not actually used here */
361 UNUSED(base); /* %parse-param base is not actually used here */
362 fprintf(stderr, "%s\n", s);
368 /* lexical analysis routine */
369 /* returns LETTER for a lower case letter, yylval = 0 through 25 */
370 /* return DIGIT for a digit, yylval = 0 through 9 */
371 /* all other characters are returned immediately */
375 while( (c=getchar()) == ' ' ) { /* skip blanks */ }
377 /* c is now nonblank */
380 yylval->ival = (c - 'a');
384 yylval->ival = (c - '0') % (*base);
389 #line 390 "ok_syntax1.tab.c"
392 #include <stdio.h> /* needed for printf */
395 #include <stdlib.h> /* needed for malloc, etc */
396 #include <string.h> /* needed for memset */
398 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
399 static int yygrowstack(YYSTACKDATA *data)
406 if ((newsize = data->stacksize) == 0)
407 newsize = YYINITSTACKSIZE;
408 else if (newsize >= YYMAXDEPTH)
410 else if ((newsize *= 2) > YYMAXDEPTH)
411 newsize = YYMAXDEPTH;
413 i = (int) (data->s_mark - data->s_base);
414 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
418 data->s_base = newss;
419 data->s_mark = newss + i;
421 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
425 data->l_base = newvs;
426 data->l_mark = newvs + i;
428 data->stacksize = newsize;
429 data->s_last = data->s_base + newsize - 1;
433 #if YYPURE || defined(YY_NO_LEAKS)
434 static void yyfreestack(YYSTACKDATA *data)
438 memset(data, 0, sizeof(*data));
441 #define yyfreestack(data) /* nothing */
444 #define YYABORT goto yyabort
445 #define YYREJECT goto yyabort
446 #define YYACCEPT goto yyaccept
447 #define YYERROR goto yyerrlab
458 /* variables for the parser stack */
460 int yym, yyn, yystate;
464 if ((yys = getenv("YYDEBUG")) != 0)
467 if (yyn >= '0' && yyn <= '9')
472 memset(&yyval, 0, sizeof(yyval));
473 memset(&yylval, 0, sizeof(yylval));
483 memset(&yystack, 0, sizeof(yystack));
486 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
487 yystack.s_mark = yystack.s_base;
488 yystack.l_mark = yystack.l_base;
493 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
497 if (yychar < 0) yychar = YYEOF;
501 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
502 printf("%sdebug: state %d, reading %d (%s)\n",
503 YYPREFIX, yystate, yychar, yys);
507 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
508 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
512 printf("%sdebug: state %d, shifting to state %d\n",
513 YYPREFIX, yystate, yytable[yyn]);
515 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
516 yystate = yytable[yyn];
517 *++yystack.s_mark = yytable[yyn];
518 *++yystack.l_mark = yylval;
520 if (yyerrflag > 0) --yyerrflag;
523 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
524 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
529 if (yyerrflag != 0) goto yyinrecovery;
531 YYERROR_CALL("syntax error");
533 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
543 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
544 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
548 printf("%sdebug: state %d, error recovery shifting\
549 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
551 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
552 yystate = yytable[yyn];
553 *++yystack.s_mark = yytable[yyn];
554 *++yystack.l_mark = yylval;
561 printf("%sdebug: error recovery discarding state %d\n",
562 YYPREFIX, *yystack.s_mark);
564 if (yystack.s_mark <= yystack.s_base) goto yyabort;
572 if (yychar == YYEOF) goto yyabort;
576 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
577 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
578 YYPREFIX, yystate, yychar, yys);
588 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
589 YYPREFIX, yystate, yyn, yyrule[yyn]);
593 yyval = yystack.l_mark[1-yym];
595 memset(&yyval, 0, sizeof yyval);
600 #line 66 "ok_syntax1.y"
604 #line 70 "ok_syntax1.y"
605 { printf("%d\n",yystack.l_mark[0].ival);}
608 #line 72 "ok_syntax1.y"
609 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
612 #line 76 "ok_syntax1.y"
613 { yyval.ival = yystack.l_mark[-1].ival; }
616 #line 78 "ok_syntax1.y"
617 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
620 #line 80 "ok_syntax1.y"
621 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
624 #line 82 "ok_syntax1.y"
625 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
628 #line 84 "ok_syntax1.y"
629 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
632 #line 86 "ok_syntax1.y"
633 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
636 #line 88 "ok_syntax1.y"
637 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
640 #line 90 "ok_syntax1.y"
641 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
644 #line 92 "ok_syntax1.y"
645 { yyval.ival = - yystack.l_mark[0].ival; }
648 #line 94 "ok_syntax1.y"
649 { yyval.ival = regs[yystack.l_mark[0].ival]; }
652 #line 99 "ok_syntax1.y"
653 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
656 #line 101 "ok_syntax1.y"
657 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
659 #line 660 "ok_syntax1.tab.c"
661 yystack.s_mark -= yym;
662 yystate = *yystack.s_mark;
663 yystack.l_mark -= yym;
665 if (yystate == 0 && yym == 0)
669 printf("%sdebug: after reduction, shifting from state 0 to\
670 state %d\n", YYPREFIX, YYFINAL);
673 *++yystack.s_mark = YYFINAL;
674 *++yystack.l_mark = yyval;
678 if (yychar < 0) yychar = YYEOF;
682 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
683 printf("%sdebug: state %d, reading %d (%s)\n",
684 YYPREFIX, YYFINAL, yychar, yys);
688 if (yychar == YYEOF) goto yyaccept;
691 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
692 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
693 yystate = yytable[yyn];
695 yystate = yydgoto[yym];
698 printf("%sdebug: after reduction, shifting from state %d \
699 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
701 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
702 *++yystack.s_mark = (YYINT) yystate;
703 *++yystack.l_mark = yyval;
707 YYERROR_CALL("yacc stack overflow");
710 yyfreestack(&yystack);
714 yyfreestack(&yystack);