⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bc.c

📁 操作系统源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
"$$7 :","statement : While $$6 '(' expression $$7 ')' statement","statement : '{' statement_list '}'","$$8 :","statement : Print $$8 print_list","print_list : print_element","print_list : print_element ',' print_list","print_element : STRING","print_element : expression","opt_else :","$$9 :","opt_else : Else $$9 statement","$$10 :","function : Define NAME '(' opt_parameter_list ')' '{' NEWLINE opt_auto_define_list $$10 statement_list NEWLINE '}'","opt_parameter_list :","opt_parameter_list : define_list","opt_auto_define_list :","opt_auto_define_list : Auto define_list NEWLINE","opt_auto_define_list : Auto define_list ';'","define_list : NAME","define_list : NAME '[' ']'","define_list : define_list ',' NAME","define_list : define_list ',' NAME '[' ']'","opt_argument_list :","opt_argument_list : argument_list","argument_list : expression","argument_list : NAME '[' ']'","argument_list : argument_list ',' expression","argument_list : argument_list ',' NAME '[' ']'","opt_expression :","opt_expression : expression","return_expression :","return_expression : expression","$$11 :","expression : named_expression ASSIGN_OP $$11 expression","$$12 :","expression : expression AND $$12 expression","$$13 :","expression : expression OR $$13 expression","expression : NOT expression","expression : expression REL_OP expression","expression : expression '+' expression","expression : expression '-' expression","expression : expression MUL_OP expression","expression : expression '^' expression","expression : '-' expression","expression : named_expression","expression : NUMBER","expression : '(' expression ')'","expression : NAME '(' opt_argument_list ')'","expression : INCR_DECR named_expression","expression : named_expression INCR_DECR","expression : Length '(' expression ')'","expression : Sqrt '(' expression ')'","expression : Scale '(' expression ')'","expression : Read '(' ')'","named_expression : NAME","named_expression : NAME '[' expression ']'","named_expression : Ibase","named_expression : Obase","named_expression : Scale","named_expression : Last",};#endif#define yyclearin (yychar=(-1))#define yyerrok (yyerrflag=0)#ifdef YYSTACKSIZE#ifndef YYMAXDEPTH#define YYMAXDEPTH YYSTACKSIZE#endif#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#define YYABORT goto yyabort#define YYACCEPT goto yyaccept#define YYERROR goto yyerrlabintyyparse(){    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]) 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;#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("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 1:#line 106 "bc.y"{			      yyval.i_value = 0;			      if (interactive)				{				  printf ("%s\n", BC_VERSION);				  welcome ();				}			    }break;case 3:#line 117 "bc.y"{ run_code (); }break;case 4:#line 119 "bc.y"{ run_code (); }break;case 5:#line 121 "bc.y"{			      yyerrok;			      init_gen ();			    }break;case 6:#line 127 "bc.y"{ yyval.i_value = 0; }break;case 10:#line 133 "bc.y"{ yyval.i_value = 0; }break;case 17:#line 142 "bc.y"{ yyval.i_value = yyvsp[0].i_value; }break;case 18:#line 145 "bc.y"{ warranty (""); }break;case 19:#line 147 "bc.y"{ limits (); }break;case 20:#line 149 "bc.y"{			      if (yyvsp[0].i_value & 2)				warn ("comparison in expression");			      if (yyvsp[0].i_value & 1)				generate ("W");			      else 				generate ("p");			    }break;case 21:#line 158 "bc.y"{			      yyval.i_value = 0;			      generate ("w");			      generate (yyvsp[0].s_value);			      free (yyvsp[0].s_value);			    }break;case 22:#line 165 "bc.y"{			      if (break_label == 0)				yyerror ("Break outside a for/while");			      else				{				  sprintf (genstr, "J%1d:", break_label);				  generate (genstr);				}			    }break;case 23:#line 175 "bc.y"{			      warn ("Continue statement");			      if (continue_label == 0)				yyerror ("Continue outside a for");			      else				{				  sprintf (genstr, "J%1d:", continue_label);				  generate (genstr);				}			    }break;case 24:#line 186 "bc.y"{ exit (0); }break;case 25:#line 188 "bc.y"{ generate ("h"); }break;case 26:#line 190 "bc.y"{ generate ("0R"); }break;case 27:#line 192 "bc.y"{ generate ("R"); }break;case 28:#line 194 "bc.y"{			      yyvsp[0].i_value = break_label; 			      break_label = next_label++;			    }break;case 29:#line 199 "bc.y"{			      if (yyvsp[-1].i_value > 1)				warn ("Comparison in first for expression");			      yyvsp[-1].i_value = next_label++;			      if (yyvsp[-1].i_value < 0)				sprintf (genstr, "N%1d:", yyvsp[-1].i_value);			      else				sprintf (genstr, "pN%1d:", yyvsp[-1].i_value);			      generate (genstr);			    }break;case 30:#line 210 "bc.y"{			      if (yyvsp[-1].i_value < 0) generate ("1");			      yyvsp[-1].i_value = next_label++;			      sprintf (genstr, "B%1d:J%1d:", yyvsp[-1].i_value, break_label);			      generate (genstr);			      yyval.i_value = continue_label;			      continue_label = next_label++;			      sprintf (genstr, "N%1d:", continue_label);			      generate (genstr);			    }break;case 31:#line 221 "bc.y"{			      if (yyvsp[-1].i_value > 1)				warn ("Comparison in third for expression");			      if (yyvsp[-1].i_value < 0)				sprintf (genstr, "J%1d:N%1d:", yyvsp[-7].i_value, yyvsp[-4].i_value);			      else				sprintf (genstr, "pJ%1d:N%1d:", yyvsp[-7].i_value, yyvsp[-4].i_value);			      generate (genstr);			    }break;case 32:#line 231 "bc.y"{			      sprintf (genstr, "J%1d:N%1d:",				       continue_label, break_label);			      generate (genstr);			      break_label = yyvsp[-12].i_value;			      continue_label = yyvsp[-4].i_value;			    }break;case 33:#line 239 "bc.y"{			      yyvsp[-1].i_value = if_label;			      if_label = next_label++;			      sprintf (genstr, "Z%1d:", if_label);			      generate (genstr);			    }break;case 34:#line 246 "bc.y"{			      sprintf (genstr, "N%1d:", if_label); 			      generate (genstr);			      if_label = yyvsp[-4].i_value;			    }break;case 35:#line 252 "bc.y"{			      yyvsp[0].i_value = next_label++;			      sprintf (genstr, "N%1d:", yyvsp[0].i_value);			      generate (genstr);			    }break;case 36:#line 258 "bc.y"{			      yyvsp[0].i_value = break_label; 			      break_label = next_label++;			      sprintf (genstr, "Z%1d:", break_label);			      generate (genstr);			    }break;case 37:#line 265 "bc.y"{			      sprintf (genstr, "J%1d:N%1d:", yyvsp[-6].i_value, break_label);			      generate (genstr);			      break_label = yyvsp[-3].i_value;			    }break;case 38:#line 271 "bc.y"{ yyval.i_value = 0; }break;case 39:#line 273 "bc.y"{  warn ("print statement"); }break;case 43:#line 280 "bc.y"{			      generate ("O");			      generate (yyvsp[0].s_value);			      free (yyvsp[0].s_value);			    }break;case 44:#line 286 "bc.y"{ generate ("P"); }break;case 46:#line 290 "bc.y"{			      warn ("else clause in if statement");			      yyvsp[0].i_value = next_label++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -