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();
113 #line 43 "ok_syntax1.y"
115 #undef YYSTYPE_IS_DECLARED
116 #define YYSTYPE_IS_DECLARED 1
118 #ifndef YYSTYPE_IS_DECLARED
119 #define YYSTYPE_IS_DECLARED 1
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')
476 memset(&yystack, 0, sizeof(yystack));
479 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
480 yystack.s_mark = yystack.s_base;
481 yystack.l_mark = yystack.l_base;
486 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
489 if ((yychar = YYLEX) < 0) yychar = YYEOF;
493 yys = yyname[YYTRANSLATE(yychar)];
494 printf("%sdebug: state %d, reading %d (%s)\n",
495 YYPREFIX, yystate, yychar, yys);
499 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
500 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
504 printf("%sdebug: state %d, shifting to state %d\n",
505 YYPREFIX, yystate, yytable[yyn]);
507 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
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]) && (yyn += yychar) >= 0 &&
519 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
524 if (yyerrflag) goto yyinrecovery;
526 YYERROR_CALL("syntax error");
539 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
540 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
544 printf("%sdebug: state %d, error recovery shifting\
545 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
547 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
551 yystate = yytable[yyn];
552 *++yystack.s_mark = yytable[yyn];
553 *++yystack.l_mark = yylval;
560 printf("%sdebug: error recovery discarding state %d\n",
561 YYPREFIX, *yystack.s_mark);
563 if (yystack.s_mark <= yystack.s_base) goto yyabort;
571 if (yychar == YYEOF) goto yyabort;
575 yys = yyname[YYTRANSLATE(yychar)];
576 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
577 YYPREFIX, yystate, yychar, yys);
587 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
588 YYPREFIX, yystate, yyn, yyrule[yyn]);
592 yyval = yystack.l_mark[1-yym];
594 memset(&yyval, 0, sizeof yyval);
598 #line 66 "ok_syntax1.y"
602 #line 70 "ok_syntax1.y"
603 { printf("%d\n",yystack.l_mark[0].ival);}
606 #line 72 "ok_syntax1.y"
607 { regs[yystack.l_mark[-2].ival] = yystack.l_mark[0].ival; }
610 #line 76 "ok_syntax1.y"
611 { yyval.ival = yystack.l_mark[-1].ival; }
614 #line 78 "ok_syntax1.y"
615 { yyval.ival = yystack.l_mark[-2].ival + yystack.l_mark[0].ival; }
618 #line 80 "ok_syntax1.y"
619 { yyval.ival = yystack.l_mark[-2].ival - yystack.l_mark[0].ival; }
622 #line 82 "ok_syntax1.y"
623 { yyval.ival = yystack.l_mark[-2].ival * yystack.l_mark[0].ival; }
626 #line 84 "ok_syntax1.y"
627 { yyval.ival = yystack.l_mark[-2].ival / yystack.l_mark[0].ival; }
630 #line 86 "ok_syntax1.y"
631 { yyval.ival = yystack.l_mark[-2].ival % yystack.l_mark[0].ival; }
634 #line 88 "ok_syntax1.y"
635 { yyval.ival = yystack.l_mark[-2].ival & yystack.l_mark[0].ival; }
638 #line 90 "ok_syntax1.y"
639 { yyval.ival = yystack.l_mark[-2].ival | yystack.l_mark[0].ival; }
642 #line 92 "ok_syntax1.y"
643 { yyval.ival = - yystack.l_mark[0].ival; }
646 #line 94 "ok_syntax1.y"
647 { yyval.ival = regs[yystack.l_mark[0].ival]; }
650 #line 99 "ok_syntax1.y"
651 { yyval.ival = yystack.l_mark[0].ival; (*base) = (yystack.l_mark[0].ival==0) ? 8 : 10; }
654 #line 101 "ok_syntax1.y"
655 { yyval.ival = (*base) * yystack.l_mark[-1].ival + yystack.l_mark[0].ival; }
657 #line 658 "ok_syntax1.tab.c"
659 yystack.s_mark -= yym;
660 yystate = *yystack.s_mark;
661 yystack.l_mark -= yym;
663 if (yystate == 0 && yym == 0)
667 printf("%sdebug: after reduction, shifting from state 0 to\
668 state %d\n", YYPREFIX, YYFINAL);
671 *++yystack.s_mark = YYFINAL;
672 *++yystack.l_mark = yyval;
675 if ((yychar = YYLEX) < 0) yychar = YYEOF;
679 yys = yyname[YYTRANSLATE(yychar)];
680 printf("%sdebug: state %d, reading %d (%s)\n",
681 YYPREFIX, YYFINAL, yychar, yys);
685 if (yychar == YYEOF) goto yyaccept;
688 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
689 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
690 yystate = yytable[yyn];
692 yystate = yydgoto[yym];
695 printf("%sdebug: after reduction, shifting from state %d \
696 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
698 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
702 *++yystack.s_mark = (YYINT) yystate;
703 *++yystack.l_mark = yyval;
707 YYERROR_CALL("yacc stack overflow");
710 yyfreestack(&yystack);
714 yyfreestack(&yystack);