📄 calc.tab.c
字号:
#ifndef lintstatic const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";#endif#define YYBYACC 1#define YYMAJOR 1#define YYMINOR 9#define yyclearin (yychar=(-1))#define yyerrok (yyerrflag=0)#define YYRECOVERING (yyerrflag!=0)extern int yyparse(void);#define YYPREFIX "yy"#line 2 "calc.y"# include <stdio.h># include <ctype.h>int regs[26];int base;#line 20 "calc.tab.c"#define DIGIT 257#define LETTER 258#define UMINUS 259#define YYERRCODE 256short 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 220short 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 YYFINAL 1#ifndef YYDEBUG#define YYDEBUG 0#endif#define YYMAXTOKEN 259#if YYDEBUGchar *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 YYSTYPEtypedef int YYSTYPE;#endif#ifdef YYSTACKSIZE#undef YYMAXDEPTH#define YYMAXDEPTH YYSTACKSIZE#else#ifdef YYMAXDEPTH#define YYSTACKSIZE YYMAXDEPTH#else#define YYSTACKSIZE 500#define YYMAXDEPTH 500#endif#endifint yydebug;int yynerrs;int yyerrflag;int yychar;short *yyssp;YYSTYPE *yyvsp;YYSTYPE yyval;YYSTYPE yylval;short yyss[YYSTACKSIZE];YYSTYPE yyvs[YYSTACKSIZE];#define yystacksize YYSTACKSIZE#line 63 "calc.y" /* start of programs */main (){ while(!feof(stdin)) { yyparse(); }}yyerror(char *s){ fprintf(stderr, "%s\n", s);}yylex() { /* lexical analysis routine */ /* returns LETTER for a lower case letter, yylval = 0 through 25 */ /* return DIGIT for a digit, yylval = 0 through 9 */ /* all other characters are returned immediately */ int c; while( (c=getchar()) == ' ' ) { /* skip blanks */ } /* c is now nonblank */ if( islower( c )) { yylval = c - 'a'; return ( LETTER ); } if( isdigit( c )) { yylval = c - '0'; return ( DIGIT ); } return( c ); }#line 207 "calc.tab.c"#define YYABORT goto yyabort#define YYREJECT goto yyabort#define YYACCEPT goto yyaccept#define YYERROR goto yyerrlabintyyparse(void){ register int yym, yyn, yystate;#if YYDEBUG register char *yys; extern char *getenv(); if (yys = getenv("YYDEBUG")) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; }#endif yynerrs = 0; yyerrflag = 0; yychar = (-1); yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0;yyloop: if ((yyn = yydefred[yystate]) != 0) 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("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); }#endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) {#if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, 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;#ifdef lint goto yynewerror;#endifyynewerror: yyerror("syntax error");#ifdef lint goto yyerrlab;#endifyyerrlab: ++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("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *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("%sdebug: error recovery discarding state %d\n", YYPREFIX, *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("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); }#endif yychar = (-1); goto yyloop; }yyreduce:#if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]);#endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) {case 3:#line 25 "calc.y"{ yyerrok ; }break;case 4:#line 29 "calc.y"{ printf("%d\n",yyvsp[0]);}break;case 5:#line 31 "calc.y"{ regs[yyvsp[-2]] = yyvsp[0]; }break;case 6:#line 35 "calc.y"{ yyval = yyvsp[-1]; }break;case 7:#line 37 "calc.y"{ yyval = yyvsp[-2] + yyvsp[0]; }break;case 8:#line 39 "calc.y"{ yyval = yyvsp[-2] - yyvsp[0]; }break;case 9:#line 41 "calc.y"{ yyval = yyvsp[-2] * yyvsp[0]; }break;case 10:#line 43 "calc.y"{ yyval = yyvsp[-2] / yyvsp[0]; }break;case 11:#line 45 "calc.y"{ yyval = yyvsp[-2] % yyvsp[0]; }break;case 12:#line 47 "calc.y"{ yyval = yyvsp[-2] & yyvsp[0]; }break;case 13:#line 49 "calc.y"{ yyval = yyvsp[-2] | yyvsp[0]; }break;case 14:#line 51 "calc.y"{ yyval = - yyvsp[0]; }break;case 15:#line 53 "calc.y"{ yyval = regs[yyvsp[0]]; }break;case 17:#line 58 "calc.y"{ yyval = yyvsp[0]; base = (yyvsp[0]==0) ? 8 : 10; }break;case 18:#line 60 "calc.y"{ yyval = base * yyvsp[-1] + yyvsp[0]; }break;#line 408 "calc.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) {#if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, 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("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, 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];#if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \to state %d\n", YYPREFIX, *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);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -