📄 hys.y
字号:
output_interface_t: OUTPUT '{' output_decl_list_t '}' {};parameter_interface_t: PARAMETER '{' parameter_decl_list_t '}' {};aux_impl_t: /*empty*/ {} | AUX '{' aux_decl_list_t '}' {};/****************************************************************************** * variable and parameter declarations * ******************************************************************************/state_decl_list_t: state_decl_t {} | state_decl_list_t state_decl_t {};input_decl_list_t: input_decl_t {} | input_decl_list_t input_decl_t {}; output_decl_list_t: output_decl_t {} | output_decl_list_t output_decl_t {};parameter_decl_list_t: parameter_decl_t {} | parameter_decl_list_t parameter_decl_t {};aux_decl_list_t: aux_decl_t {} | aux_decl_list_t aux_decl_t {};state_decl_t: REAL state_real_ident_list_t ';' {} | BOOL state_bool_ident_list_t ';' {};input_decl_t: REAL input_real_ident_list_t ';' {} | BOOL input_bool_ident_list_t ';' {};output_decl_t: REAL output_real_ident_list_t ';' {} | BOOL output_bool_ident_list_t ';' {};parameter_decl_t: REAL parameter_real_ident_list_t ';' {} | BOOL parameter_bool_ident_list_t ';' {};aux_decl_t: REAL aux_real_ident_list_t ';' {} | BOOL aux_bool_ident_list_t ';' {}; new_ident_t: NEW_IDENTIFIER { $$=$1 } | DEFAULT_PARAMETER {//cout << "OVERWRITING DEFAULT " << $1->get_name() <<endl; cout.flush(); assert($1->is_virginal()); $$=new string($1->get_name()); ((t_parser_input*)p_in)->globals->symbol_table->remove($1); } | NONDEFAULT_PARAMETER { yyerror("Parameter already defined"); }; parameter_t: NONDEFAULT_PARAMETER { $$=$1 } | DEFAULT_PARAMETER { $$=$1 }; state_real_ident_list_t: new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(STATE_KIND, REAL_TYPE, * $1); s->set_minmaxeps($2); s->set_declared(@1.first_line); } | state_real_ident_list_t ',' new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(STATE_KIND, REAL_TYPE, * $3); s->set_minmaxeps($4); s->set_declared(@3.first_line); };state_bool_ident_list_t: new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(STATE_KIND, BOOL_TYPE, * $1); s->set_declared(@1.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); } | state_bool_ident_list_t ',' new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(STATE_KIND, BOOL_TYPE, * $3); s->set_declared(@3.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); };input_real_ident_list_t: new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(INPUT_KIND, REAL_TYPE, * $1); s->set_minmaxeps($2); s->set_declared(@1.first_line); } | input_real_ident_list_t ',' new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(INPUT_KIND, REAL_TYPE, * $3); s->set_minmaxeps($4); s->set_declared(@3.first_line); };input_bool_ident_list_t: new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(INPUT_KIND, BOOL_TYPE, * $1); s->set_declared(@1.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); } | input_bool_ident_list_t ',' new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(INPUT_KIND, BOOL_TYPE, * $3); s->set_declared(@3.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); };output_real_ident_list_t: new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(OUTPUT_KIND, REAL_TYPE, * $1); s->set_declared(@1.first_line); } | output_real_ident_list_t ',' new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(OUTPUT_KIND, REAL_TYPE, * $3); s->set_declared(@3.first_line); }; output_bool_ident_list_t: new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(OUTPUT_KIND, BOOL_TYPE, * $1); s->set_declared(@1.first_line); } | output_bool_ident_list_t ',' new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(OUTPUT_KIND, BOOL_TYPE, * $3); s->set_declared(@3.first_line); };parameter_real_ident_list_t: parameter_real_ident_t | parameter_real_ident_list_t ',' parameter_real_ident_t;parameter_bool_ident_list_t: parameter_bool_ident_t | parameter_bool_ident_list_t ',' parameter_bool_ident_t; parameter_real_ident_t: new_ident_t '=' real_expr_t { const Param_symbol *s; s=(const Param_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(PARAM_KIND, REAL_TYPE, * $1); s->set_declared(@1.first_line); s->set_value($3); } | new_ident_t { const Param_symbol *s; s=(const Param_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(PARAM_KIND, REAL_TYPE, * $1); s->set_declared(@1.first_line); s->set_value(NULL); };parameter_bool_ident_t: new_ident_t '=' TRUE { const Param_symbol *s; s=(const Param_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(PARAM_KIND, BOOL_TYPE, * $1); s->set_value(new Number_expr(true, ((t_parser_input*)p_in)->globals)); s->set_declared(@1.first_line); } | new_ident_t '=' FALSE { const Param_symbol *s; s=(const Param_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(PARAM_KIND, BOOL_TYPE, * $1); s->set_value(new Number_expr(false, ((t_parser_input*)p_in)->globals)); s->set_declared(@1.first_line); }; aux_real_ident_list_t: new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(AUX_KIND, REAL_TYPE, * $1); s->set_minmaxeps($2); s->set_declared(@1.first_line); } | aux_real_ident_list_t ',' new_ident_t opt_var_minmax_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(AUX_KIND, REAL_TYPE, * $3); s->set_minmaxeps($4); s->set_declared(@3.first_line); }; aux_bool_ident_list_t: new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(AUX_KIND, BOOL_TYPE, * $1); s->set_declared(@1.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); } | aux_bool_ident_list_t ',' new_ident_t { const Var_symbol *s; s=(const Var_symbol*)((t_parser_input*)p_in)->globals->symbol_table->create_symbol(AUX_KIND, BOOL_TYPE, * $3); s->set_declared(@3.first_line); s->set_minmaxeps(new Min_max_eps(new Number_expr(0.0, ((t_parser_input*)p_in)->globals), new Number_expr(1.0, ((t_parser_input*)p_in)->globals), NULL, ((t_parser_input*)p_in)->globals) ); };/****************************************************************************** * real expressions * ******************************************************************************/real_expr_t: NUM { $$ = new Number_expr($1, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($$->to_matlab()); } | parameter_t { $1->set_used(@1.first_line); $$=new Parameter_expr($1, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name()); } | REALVARIABLE { $1->set_used(@1.first_line); $$=new Variable_expr($1, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name()); } | '(' REAL logic_expr_t ')' { $$ = new Cast_log2real_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("(REAL ") + $3->get_source() + string(")")); } | real_expr_t '+' real_expr_t { $$ = new Plus_expr($1, $3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" + ") + $3->get_source()); } | real_expr_t '-' real_expr_t { $$ = new Minus_expr($1, $3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" - ") + $3->get_source()); } | real_expr_t '*' real_expr_t { $$ = new Mult_expr($1, $3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" * ") + $3->get_source()); } | real_expr_t '/' real_expr_t { $$ = new Div_expr($1, $3); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" / ") + $3->get_source()); } | real_expr_t '^' real_expr_t { $$ = new Log_expr(new Mult_expr($1, new Exp_expr($3))); $$->set_source_line(@1.first_line); $$->set_source($1->get_source() + string(" ^ ") + $3->get_source()); } | '('real_expr_t')' { $$ = $2; $$->set_source_line(@1.first_line); $$->set_source(string("(") + $2->get_source() + string(")") ); } | '-' real_expr_t %prec UNARY { $$ = new Neg_expr($2); $$->set_source_line(@1.first_line); $$->set_source(string("-") + $2->get_source()); } | COS '(' real_expr_t ')' %prec UNARY { $$ = new Cos_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("cos(") + $3->get_source() + string(")") ); } | EXP '(' real_expr_t ')' %prec UNARY { $$ = new Exp_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("exp(") + $3->get_source() + string(")") ); } | SIN '(' real_expr_t ')' %prec UNARY { $$ = new Sin_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("sin(") + $3->get_source() + string(")") ); } | SQRT '(' real_expr_t ')' %prec UNARY { $$ = new Sqrt_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("sqrt(") + $3->get_source() + string(")") ); } | LOG '(' real_expr_t ')' %prec UNARY { $$ = new Log_expr($3); $$->set_source_line(@1.first_line); $$->set_source(string("log(") + $3->get_source() + string(")") ); };/****************************************************************************** * logic expressions * ******************************************************************************/logic_expr_t: TRUE { $$=new Number_expr(new Bool_number(true), ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source(string("TRUE")); } | FALSE { $$=new Number_expr(new Bool_number(false), ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source(string("FALSE")); } | BOOLVARIABLE { $1->set_used(@1.first_line); $$=new Variable_expr($1, ((t_parser_input*)p_in)->globals); $$->set_source_line(@1.first_line); $$->set_source($1->get_name()); } | 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()); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -