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

📄 hys.y

📁 由matlab开发的hybrid系统的描述语言
💻 Y
📖 第 1 页 / 共 3 页
字号:
	| 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 + -