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

📄 yacc.yy_policy_backend_parser.cc

📁 xorp源码hg
💻 CC
📖 第 1 页 / 共 2 页
字号:
    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("%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 >= yysslim && yygrowstack())        {            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;#if defined(lint) || defined(__GNUC__)    goto yynewerror;#endifyynewerror:    yyerror("syntax error");#if defined(lint) || defined(__GNUC__)    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 >= yysslim && yygrowstack())                {                    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 4:#line 55 "backend.y"{	  	/* XXX: doesn't delete old*/		(*_yy_sets)[yyvsp[-2].c_str] = _ef.create(yyvsp[-3].c_str, yyvsp[-1].c_str);		free(yyvsp[-3].c_str); free(yyvsp[-2].c_str); free(yyvsp[-1].c_str);	  }break;case 5:#line 62 "backend.y"{			PolicyInstr* pi = new PolicyInstr(yyvsp[-4].c_str,_yy_terms);			_yy_terms = new vector<TermInstr*>();			_yy_policies->push_back(pi);			free(yyvsp[-4].c_str);			}break;case 6:#line 71 "backend.y"{	  			TermInstr* ti = new TermInstr(yyvsp[-4].c_str,_yy_instructions);			_yy_instructions = new vector<Instruction*>();			_yy_terms->push_back(ti);			free(yyvsp[-4].c_str);			}break;case 10:#line 88 "backend.y"{	  			Instruction* i = new Push(_ef.create(yyvsp[-1].c_str,yyvsp[0].c_str));				_yy_instructions->push_back(i);	  			free(yyvsp[-1].c_str); free(yyvsp[0].c_str);	  			}break;case 11:#line 93 "backend.y"{				_yy_instructions->push_back(new PushSet(yyvsp[0].c_str));				free(yyvsp[0].c_str);				}break;case 12:#line 98 "backend.y"{				_yy_instructions->push_back(new OnFalseExit());				}break;case 13:#line 102 "backend.y"{				char* err = NULL;				bool is_error = false;				VarRW::Id id = strtoul(yyvsp[0].c_str, &err, 10);				if ((err != NULL) && (*err != '\0'))				    is_error = true;				free(yyvsp[0].c_str);				if (is_error) {					yyerror("Need numeric var ID");					YYERROR;				}				_yy_instructions->push_back(new Load(id));				}break;case 14:#line 116 "backend.y"{				char* err = NULL;				bool is_error = false;				VarRW::Id id = strtoul(yyvsp[0].c_str, &err, 10);				if ((err != NULL) && (*err != '\0'))				    is_error = true;				free(yyvsp[0].c_str);				if (is_error) {					yyerror("Need numeric var ID");					YYERROR;				}				_yy_instructions->push_back(new Store(id));				}break;case 15:#line 130 "backend.y"{ _yy_instructions->push_back(new Accept()); }break;case 16:#line 131 "backend.y"{ _yy_instructions->push_back(new Reject()); }break;case 17:#line 133 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpEq)); }break;case 18:#line 134 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpNe)); }break;case 19:#line 135 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpLt)); }break;case 20:#line 136 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpGt)); }break;case 21:#line 137 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpLe)); }break;case 22:#line 138 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpGe)); }break;case 23:#line 140 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpNot)); }break;case 24:#line 141 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpAnd)); }break;case 25:#line 142 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpXor)); }break;case 26:#line 143 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpOr)); }break;case 27:#line 145 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpAdd)); }break;case 28:#line 146 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpSub)); }break;case 29:#line 147 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpMul)); }break;case 30:#line 148 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpHead));}break;case 31:#line 149 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpCtr));}break;case 32:#line 150 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpNEInt));}break;case 33:#line 151 "backend.y"{ _yy_instructions->push_back(new NaryInstr(new OpRegex));}break;#line 602 "yacc.yy_policy_backend_parser.cc"    }    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 >= yysslim && yygrowstack())    {        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 + -