home *** CD-ROM | disk | FTP | other *** search
- #ifndef lint
- char yysccsid[] = "@(#)yaccpar 1.00 (Berkeley) 1989/11/22";
- #endif
- short yylhs[] = { -1,
- 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 3, 3,
- };
- short yylen[] = { 2,
- 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 2, 1, 1, 1, 2,
- };
- short yydefred[] = { 1,
- 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
- 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
- 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
- 10, 11,
- };
- short yydgoto[] = { 1,
- 7, 8, 9,
- };
- short yysindex[] = { 0,
- -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
- -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
- -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
- 0, 0,
- };
- short yyrindex[] = { 0,
- 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
- 0, 0,
- };
- short yygindex[] = { 0,
- 0, 65, 0,
- };
- #define YYTABLESIZE 220
- short yytable[] = { 6,
- 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
- 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
- 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
- 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
- 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
- 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
- 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
- 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
- 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
- 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
- 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
- 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
- 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
- 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
- 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
- };
- short yycheck[] = { 40,
- 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
- 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
- -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
- -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
- -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
- 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
- -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
- 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
- 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
- -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
- -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
- -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
- -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
- -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
- -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
- };
- #define DIGIT 257
- #define LETTER 258
- #define UMINUS 259
- #define YYERRCODE 256
- #line 3 "dc.y"
- #include <stdio.h>
- #include <ctype.h>
-
- int regs[26];
- int base;
-
- #line 96 "y.tab.c"
- #define YYFINAL 1
- #ifndef YYDEBUG
- #define YYDEBUG 0
- #endif
- #define YYMAXTOKEN 259
- #if YYDEBUG
- char *yyname[] = {
- "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,0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,
- 0,0,0,0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",
- };
- char *yyrule[] = {
- "$accept : list",
- "list :",
- "list : list stat '\\n'",
- "list : list error '\\n'",
- "stat : expr",
- "stat : LETTER '=' expr",
- "expr : '(' expr ')'",
- "expr : expr '+' expr",
- "expr : expr '-' expr",
- "expr : expr '*' expr",
- "expr : expr '/' expr",
- "expr : expr '%' expr",
- "expr : expr '&' expr",
- "expr : expr '|' expr",
- "expr : '-' expr",
- "expr : LETTER",
- "expr : number",
- "number : DIGIT",
- "number : number DIGIT",
- };
- #endif
- #ifndef YYSTYPE
- typedef int YYSTYPE;
- #endif
- #define yyclearin (yychar=(-1))
- #define yyerrok (yyerrflag=0)
- #ifndef YYSTACKSIZE
- #ifdef YYMAXDEPTH
- #define YYSTACKSIZE YYMAXDEPTH
- #else
- #define YYSTACKSIZE 300
- #endif
- #endif
- int yybackup;
- int yydebug;
- int yynerrs;
- int yyerrflag;
- int yychar;
- short *yyssp;
- YYSTYPE *yyvsp;
- YYSTYPE yyval;
- YYSTYPE yylval;
- #define yystacksize YYSTACKSIZE
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #line 64 "dc.y"
-
- yylex()
- {
- int c;
- while ((c=getchar()) == ' ');
- if (islower(c)) {
- yylval = c - 'a';
- return (LETTER);
- }
- if (isdigit(c)) {
- yylval = c - '0';
- return(DIGIT);
- }
- return (c);
- }
-
- #line 176 "y.tab.c"
- #define YYACCEPT goto yyaccept
- #define YYERROR goto yyerrlab
- int
- yyparse()
- {
- register int yym, yyn, yystate;
- #if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn == '0')
- yydebug = 0;
- else if (yyn >= '1' && yyn <= '9')
- yydebug = yyn - '0';
- }
- #endif
-
- yybackup = 0;
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
- yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
- #endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
- yynewerror:
- yyerror("syntax error");
- yyerrlab:
- ++yynerrs;
- yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
- #endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
- #endif
- yychar = (-1);
- goto yyloop;
- }
- yyreduce:
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
- #endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
- case 3:
- #line 25 "dc.y"
- { yyerrok; }
- break;
- case 4:
- #line 29 "dc.y"
- { printf("%d\n",yyvsp[0]); }
- break;
- case 5:
- #line 31 "dc.y"
- { regs[yyvsp[-2]] = yyvsp[0]; }
- break;
- case 6:
- #line 35 "dc.y"
- { yyval = yyvsp[-1]; }
- break;
- case 7:
- #line 37 "dc.y"
- { yyval = yyvsp[-2] + yyvsp[0]; }
- break;
- case 8:
- #line 39 "dc.y"
- { yyval = yyvsp[-2] - yyvsp[0]; }
- break;
- case 9:
- #line 41 "dc.y"
- { yyval = yyvsp[-2] * yyvsp[0]; }
- break;
- case 10:
- #line 43 "dc.y"
- { yyval = yyvsp[-2] / yyvsp[0]; }
- break;
- case 11:
- #line 45 "dc.y"
- { yyval = yyvsp[-2] % yyvsp[0]; }
- break;
- case 12:
- #line 47 "dc.y"
- { yyval = yyvsp[-2] & yyvsp[0]; }
- break;
- case 13:
- #line 49 "dc.y"
- { yyval = yyvsp[-2] | yyvsp[0]; }
- break;
- case 14:
- #line 51 "dc.y"
- { yyval = - yyvsp[0]; }
- break;
- case 15:
- #line 53 "dc.y"
- { yyval = regs[yyvsp[0]]; }
- break;
- case 17:
- #line 58 "dc.y"
- { yyval = yyvsp[0]; base = (yyvsp[0]==0) ? 8 : 10; }
- break;
- case 18:
- #line 60 "dc.y"
- { yyval = base * yyvsp[-1] + yyvsp[0]; }
- break;
- #line 372 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- if (yybackup)
- {
- yybackup = 0;
- goto yyloop;
- }
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
- #ifdef YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
- #endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
- #endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
- #ifdef YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
- to state %d\n", *yyssp, yystate);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
- yyerror("yacc stack overflow");
- yyabort:
- return (1);
- yyaccept:
- return (0);
- }
-