📄 hys.y
字号:
| logic_expr_t "||" logic_expr_t { $$ = new Or_expr($1,$3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" || ") + $3->get_source()); } | logic_expr_t '&' logic_expr_t { $$ = new And_expr($1,$3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" & ") + $3->get_source()); } | logic_expr_t "&&" logic_expr_t { $$ = new And_expr($1,$3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" && ") + $3->get_source()); } | logic_expr_t "->" logic_expr_t { $$ = new Implication_expr($1,$3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" -> ") + $3->get_source()); } | logic_expr_t "<-" logic_expr_t { $$ = new Implication_expr($3,$1); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" <- ") + $3->get_source()); } | logic_expr_t "<->" logic_expr_t { $$ = new Equivalence_expr($1,$3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" <-> ") + $3->get_source()); } | '~' logic_expr_t { $$ = new Not_expr($2); $$->set_source_line(@1.first_line); $$->set_source(string("~") + $2->get_source()); } | '!' logic_expr_t { $$ = new Not_expr($2); $$->set_source_line(@1.first_line); $$->set_source(string("!") + $2->get_source()); } | '('logic_expr_t')' { $$ = $2; $$->set_source_line(@1.first_line); $$->set_source(string("(") + $2->get_source() + string(")")); };/****************************************************************************** * min/max, min/max/eps * ******************************************************************************/opt_minmaxeps_t: /*empty*/ {$$ = NULL} | minmaxeps_t {$$ = $1};minmaxeps_t: '[' real_expr_t ',' real_expr_t ',' real_expr_t ']' { $$ = new Min_max_eps($2, $4, $6, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source(string("[") + $2->get_source() + string(", ") + $4->get_source() + string(", ") + $6->get_source() + string("]")); }; opt_var_minmax_t: /*empty*/ {$$ = NULL} | var_minmax_t {$$ = $1};var_minmax_t: '[' real_expr_t ',' real_expr_t ']' { $$ = new Min_max_eps($2, $4, NULL, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source(string("[") + $2->get_source() + string(", ") + $4->get_source() + string("]")); }; /****************************************************************************** * implementation of sections and items * ******************************************************************************/AD_section_t: AD '{' '}' {$$ = new AD_section(new list<Item*>, "AD source", ((t_parser_input*)p_in)->globals);} | AD '{' AD_list_t '}' {$$ = new AD_section($3, "AD source", ((t_parser_input*)p_in)->globals); }; AD_list_t: AD_item_t { $$ = new list<Item *>(); $$->push_back($1); } |AD_list_t AD_item_t { $1->push_back($2); }; AD_item_t: BOOLVARIABLE '=' real_expr_t "<=" real_expr_t minmaxeps_t ';' { // check that the 2nd real_expr_t is zero if ( !$5->is_number() || !$5->compute_number()->get_type()==REAL_TYPE || !((Real_number*)($5->compute_number()))->is_zero() ) { string msg; char buf[20]; sprintf(buf, "line %d: ", @1.first_line); msg=buf; msg+=string("right of '<=' must be zero."); ((t_parser_input*)p_in)->globals->problem_handler->process(new Problem(ERROR, msg)); } $$ = new AD_item($1, $3, $6, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(" <= ") + $5->get_source() + string(" ") + $6->get_source() + string(";")); } | BOOLVARIABLE '=' real_expr_t "<=" real_expr_t ';' { Expr *tmp; tmp=new Minus_expr($3, $5); $$ = new AD_item($1, tmp, NULL, ((t_parser_input*)p_in)->globals);$$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(" <= ") + $5->get_source() + string(";")); $$->set_source_line(@1.first_line); } | BOOLVARIABLE '=' real_expr_t ">=" real_expr_t ';' { Expr *tmp; tmp=new Minus_expr($5, $3); $$ = new AD_item($1, tmp, NULL, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line);$$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(" >= ") + $5->get_source() + string(";") ); }; /*****************************************************************************/ DA_section_t: DA '{' '}' {$$ = new DA_section(new list<Item*>, "DA source", ((t_parser_input*)p_in)->globals);} | DA '{' DA_list_t '}' {$$ = new DA_section($3, "DA source", ((t_parser_input*)p_in)->globals); };DA_list_t: DA_item_t { $$ = new list<Item *>(); $$->push_back($1); } |DA_list_t DA_item_t { $1->push_back($2); }; DA_item_t: REALVARIABLE '=' '{' IF logic_expr_t THEN real_expr_t opt_minmaxeps_t ELSE real_expr_t opt_minmaxeps_t '}' ';' { string src; $$ = new DA_item($1, $5, $7, $8, $10, $11, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); src=$1->get_name() + string(" = {IF ") + $5->get_source() + string(" THEN ") + $7->get_source(); if ($8) src+= string(" ") + $8->get_source(); src+=string(" ELSE ") + $10->get_source(); if ($11) src+=string(" ") + $11->get_source(); src+=string("};"); $$->set_source(src); } |REALVARIABLE '=' '{' IF logic_expr_t THEN real_expr_t opt_minmaxeps_t '}' ';' { string src; $$ = new DA_item($1, $5, $7, $8, NULL, NULL, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); src=$1->get_name() + string(" = {IF ") + $5->get_source() + string(" THEN ") + $7->get_source(); if ($8) src+= string(" ") + $8->get_source(); src+=string("};"); $$->set_source(src); }; /******************************************************************************/continuous_section_t: CONTINUOUS '{' '}' {$$ = new Continuous_section(new list<Item *>, "continuous source", ((t_parser_input*)p_in)->globals)} | CONTINUOUS '{' continuous_list_t '}' {$$ = new Continuous_section($3, "continuous source", ((t_parser_input*)p_in)->globals)}; continuous_list_t: continuous_item_t { $$ = new list<Item *>(); $$->push_back($1); } | continuous_list_t continuous_item_t { $1->push_back($2); };continuous_item_t: REALVARIABLE '=' real_expr_t ';' { $$ = new Continuous_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); };/******************************************************************************/automata_section_t: AUTOMATA '{' '}' {$$ = new Automata_section(new list<Item *>, "Automata source", ((t_parser_input*)p_in)->globals)} | AUTOMATA '{' automata_list_t '}' {$$ = new Automata_section($3, "Automata source", ((t_parser_input*)p_in)->globals)};automata_list_t: automata_item_t { $$ = new list<Item *>(); $$->push_back($1); } | automata_list_t automata_item_t { $1->push_back($2); };automata_item_t: BOOLVARIABLE '=' logic_expr_t ';' { $$ = new Automata_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); }; /******************************************************************************/must_section_t: MUST '{' '}' {$$ = new Must_section(new list<Item*>, "must source", ((t_parser_input*)p_in)->globals);} | MUST '{' must_list_t '}' { $$ = new Must_section($3, "must source", ((t_parser_input*)p_in)->globals); };must_list_t: must_item_t { $$ = new list<Item *>(); $$->push_back($1); } | must_list_t must_item_t { $1->push_back($2); };must_item_t: must_affine_t {$$ = $1} | must_logic_t {$$ = $1};must_logic_t: logic_expr_t ';' { $$ = new Logic_must_item($1, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(";")); }; must_affine_t: real_expr_t "<=" real_expr_t ';' { Expr *e; e=new Minus_expr($1, $3); $$ = new Cont_must_item(e, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" <= ") + $3->get_source() + string(";")); } | real_expr_t ">=" real_expr_t ';' { Expr *e; e=new Minus_expr($3, $1); $$ = new Cont_must_item(e, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" >= ") + $3->get_source() + string(";")); };/******************************************************************************/logic_section_t: LOGIC '{' '}' {$$ = new Logic_section(new list<Item *>, "logic source", ((t_parser_input*)p_in)->globals)} | LOGIC '{' logic_list_t '}' {$$ = new Logic_section($3, "logic source", ((t_parser_input*)p_in)->globals)};logic_list_t: logic_item_t { $$ = new list<Item *>(); $$->push_back($1); } |logic_list_t logic_item_t { $1->push_back($2); };logic_item_t: BOOLVARIABLE '=' logic_expr_t ';' { $$ = new Logic_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); };/******************************************************************************/linear_section_t: LINEAR '{' '}' {$$ = new Linear_section(new list<Item *>, "linear source", ((t_parser_input*)p_in)->globals)} | LINEAR '{'linear_list_t'}' {$$ = new Linear_section($3, "linear source", ((t_parser_input*)p_in)->globals)};linear_list_t: linear_item_t {$$ = new list<Item *>(); $$->push_back($1)}; | linear_list_t linear_item_t {$1->push_back($2)};linear_item_t: REALVARIABLE '=' real_expr_t ';' { $$ = new Linear_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); };/******************************************************************************/output_section_t: OUTPUT '{' '}' {$$ = new Output_section(new list<Item *>, "output source", ((t_parser_input*)p_in)->globals)} | OUTPUT '{'output_list_t'}' {$$ = new Output_section($3, "output source", ((t_parser_input*)p_in)->globals)};output_list_t: output_item_t {$$ = new list<Item *>(); $$->push_back($1)}; | output_list_t output_item_t {$1->push_back($2)};output_item_t: output_affine_t {$$ = $1} | output_logic_t {$$ = $1}; output_affine_t: REALVARIABLE '=' real_expr_t ';' { $$ = new Cont_output_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); };output_logic_t: BOOLVARIABLE '=' logic_expr_t ';' { $$ = new Logic_output_item($1, $3, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name() + string(" = ") + $3->get_source() + string(";")); };/****************************************************************************** * Grammar ends * ******************************************************************************/%%#undef yyerror
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -