📄 syst_grammar.y
字号:
| exp '.' RVALID '(' ')' { if(setjmp(Env) != 0) ERR("invalid") else { $$ = (~(*$1) == FALSE); } resetjmp(); } | IVALID '(' exp ')' { if(setjmp(Env) != 0) ERR("invalid") else { $$ = is_valid_int($3); } resetjmp(); } | exp '.' IVALID '(' ')' { if(setjmp(Env) != 0) ERR("invalid") else { $$ = is_valid_int($1); } resetjmp(); } | CONTAINED '(' exp exp ')' { if(setjmp(Env) != 0) ERR("cannot perform is contained") else { $$ = is_contained($3, $4); } resetjmp(); } ; exp: INEQ { $$ = $1; } | QVAR { if(setjmp(Env) != 0) ERR("cannot find") else { $$ = $1->get_sc(); } resetjmp(); } | QVAR '=' exp { $$ = $3; if(setjmp(Env) != 0) ERR("cannot set") else { $1->set($3); } resetjmp(); } | LVAR '=' exp { $$ = $3; if(setjmp(Env) != 0) ERR("cannot set") else { $1->set($3); } } | '[' ineqlist ']' { if(setjmp(Env) != 0) ERR("cannot create inequality") else { $$ = mk_sc($2); } resetjmp(); } | ORDER '(' exp varlist ')' { if(setjmp(Env) != 0) ERR("cannot order inequality") else { $$ = order($3, $4); } resetjmp(); } | exp '.' ORDER '(' varlist ')' { if(setjmp(Env) != 0) ERR("cannot order inequality") else { $$ = order($1, $5); } resetjmp(); } | RENAME '(' exp varlist ')' { if(setjmp(Env) != 0) ERR("cannot rename inequality") else { $$ = rename($3, $4); } resetjmp(); } | exp '.' RENAME '(' varlist ')' { if(setjmp(Env) != 0) ERR("cannot rename inequality") else { $$ = rename($1, $5); } resetjmp(); } | PROJECT '(' exp ')' { if(setjmp(Env) != 0) ERR("cannot project inequality") else { $$ = project($3, NULL); } resetjmp(); } | exp '.' PROJECT '(' ')' { if(setjmp(Env) != 0) ERR("cannot project inequality") else { $$ = project($1, NULL); } resetjmp(); } | PROJECT '(' exp LVAR ')' { if(setjmp(Env) != 0) ERR("cannot project inequality") else { $$ = project($3, $4->nm()); } resetjmp(); } | exp '.' PROJECT '(' LVAR ')' { if(setjmp(Env) != 0) ERR("cannot project inequality") else { $$ = project($1, $5->nm()); } resetjmp(); } | SIMPLIFY '(' exp ')' { if(setjmp(Env) != 0) ERR("cannot simplify inequality") else { $$ = simplify($3, NULL); } resetjmp(); } | exp '.' SIMPLIFY '(' ')' { if(setjmp(Env) != 0) ERR("cannot simplify inequality") else { $$ = simplify($1, NULL); } resetjmp(); } | SIMPLIFY '(' exp LVAR ')' { if(setjmp(Env) != 0) ERR("cannot simplify inequality") else { $$ = simplify($3, $4->nm()); } resetjmp(); } | exp '.' SIMPLIFY '(' LVAR ')' { if(setjmp(Env) != 0) ERR("cannot simplify inequality") else { $$ = simplify($1, $5->nm()); } resetjmp(); } | '{' compose '}' { $$ = $2; }; compose: exp { $$ = $1; } | compose '\n' exp { if(setjmp(Env) != 0) ERR("cannot compose multiple") else { $$ = named_symcoeff_ineq::and_($1, $3, TRUE, TRUE); } resetjmp(); } | compose ',' exp { if(setjmp(Env) != 0) ERR("cannot compose multiple") else { $$ = named_symcoeff_ineq::and_($1, $3, TRUE, TRUE); } resetjmp(); }; ineqlist: ineq1 { if(setjmp(Env) != 0) ERR("cannot create coif") else { $$ = $1; } resetjmp(); } | ineq1 '\n' { if(setjmp(Env) != 0) ERR("cannot create coif") else { $$ = $1; } resetjmp(); } | ineq1 '\n' ineqlist { if(setjmp(Env) != 0) ERR("cannot create coif") else { $3->append($1); $$ = $3; } resetjmp(); }; ineq1: coifn '>' '=' coifn { DOCOIF1($$, $1, 0, $4); } | coifn '<' '=' coifn { DOCOIF1($$, $4, 0, $1); } | coifn '>' coifn { DOCOIF1($$, $1, 1, $3); } | coifn '<' coifn { DOCOIF1($$, $3, 1, $1); } | coifn '>' '=' coifn '>' '=' coifn { DOCOIF2($$, $1, 0, $4, 0, $7); } | coifn '>' '=' coifn '>' coifn { DOCOIF2($$, $1, 0, $4, 1, $6); } | coifn '>' coifn '>' '=' coifn { DOCOIF2($$, $1, 1, $3, 0, $6); } | coifn '>' coifn '>' coifn { DOCOIF2($$, $1, 1, $3, 1, $5); } | coifn '<' '=' coifn '<' '=' coifn { DOCOIF2($$, $7, 0, $4, 0, $1); } | coifn '<' '=' coifn '<' coifn { DOCOIF2($$, $6, 1, $4, 0, $1); } | coifn '<' coifn '<' '=' coifn { DOCOIF2($$, $6, 0, $3, 1, $1); } | coifn '<' coifn '<' coifn { DOCOIF2($$, $5, 1, $3, 1, $1); } | coifn '=' '=' coifn %prec LEFTEQ { DOCOIF3($$, $1, $4); } | coifn '=' coifn %prec LEFTEQ { DOCOIF3($$, $1, $3); } ; coifn: coif1 { $$ = $1; } | coifn '+' coif1 { if(setjmp(Env) != 0) ERR("cannot create coif") else { triplet & c1 = *$1; triplet & c2 = *$3; $$ = concat(&c1, &c2); } resetjmp(); } | coifn '-' coif1 { if(setjmp(Env) != 0) ERR("cannot create coif") else { triplet & c1 = *$1; triplet & c2 = *$3; c2 *= -1; $$ = concat(&c1, &c2); } resetjmp(); }; coif1: snum { $$ = new triplet($1); } | snum '*' LVAR { $$ = new triplet($3->nm(), $1); } | LVAR { $$ = new triplet($1->nm(), 1); } | '-' LVAR { $$ = new triplet($2->nm(), -1); } | snum '*' LVAR '*' LVAR { $$ = new triplet($5->nm(), $1, $3->nm()); } | LVAR '*' LVAR { $$ = new triplet($3->nm(), 1, $1->nm()); } | '-' LVAR '*' LVAR { $$ = new triplet($4->nm(), -1, $2->nm()); } ; varlist: LVAR { if(setjmp(Env) != 0) ERR("cannot create coif") else { $$ = new triplet($1->nm()); } resetjmp(); } | LVAR varlist { if(setjmp(Env) != 0) ERR("cannot create coif") else { triplet * c1 = new triplet($1->nm()); triplet * c2 = $2; $$ = concat(c1, c2); } resetjmp(); }; mergelist: exp { if(setjmp(Env) != 0) ERR("cannot merge") else { named_symcoeff_ineq_list * scl; scl = new named_symcoeff_ineq_list; scl->append($1); $$ = scl; } resetjmp(); } | mergelist exp { if(setjmp(Env) != 0) ERR("cannot merge") else { named_symcoeff_ineq_list * scl; scl = $1; scl->append($2); $$ = scl; } resetjmp(); }; /* End of grammar */ %%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -