diff --git a/DataTree.cc b/DataTree.cc index e6ae3fcde1931e6c4d121540a21d6e267f8cab14..7452b63b77b3a7480477ad17fcd423895431a2bd 100644 --- a/DataTree.cc +++ b/DataTree.cc @@ -31,17 +31,17 @@ DataTree::DataTree(SymbolTable &symbol_table_arg, external_functions_table(external_functions_table_arg), node_counter(0) { - Zero = AddNumConstant("0"); - One = AddNumConstant("1"); - Two = AddNumConstant("2"); + Zero = AddNonNegativeConstant("0"); + One = AddNonNegativeConstant("1"); + Two = AddNonNegativeConstant("2"); MinusOne = AddUMinus(One); - NaN = AddNumConstant("NaN"); - Infinity = AddNumConstant("Inf"); + NaN = AddNonNegativeConstant("NaN"); + Infinity = AddNonNegativeConstant("Inf"); MinusInfinity = AddUMinus(Infinity); - Pi = AddNumConstant("3.141592653589793"); + Pi = AddNonNegativeConstant("3.141592653589793"); } DataTree::~DataTree() @@ -51,9 +51,9 @@ DataTree::~DataTree() } expr_t -DataTree::AddNumConstant(const string &value) +DataTree::AddNonNegativeConstant(const string &value) { - int id = num_constants.AddConstant(value); + int id = num_constants.AddNonNegativeConstant(value); num_const_node_map_t::iterator it = num_const_node_map.find(id); if (it != num_const_node_map.end()) diff --git a/DataTree.hh b/DataTree.hh index 814284a5462e555e6dcc397790d5a2db590093f2..5d75de0cdb8c3799a846b8e38f437aa78295d0ac 100644 --- a/DataTree.hh +++ b/DataTree.hh @@ -107,8 +107,8 @@ public: } }; - //! Adds a numerical constant - expr_t AddNumConstant(const string &value); + //! Adds a non-negative numerical constant (possibly Inf or NaN) + expr_t AddNonNegativeConstant(const string &value); //! Adds a variable /*! The default implementation of the method refuses any lag != 0 */ virtual VariableNode *AddVariable(int symb_id, int lag = 0); @@ -251,7 +251,7 @@ DataTree::AddPossiblyNegativeConstant(double v) ostringstream ost; ost << setprecision(CONSTANTS_PRECISION) << v; - expr_t cnode = AddNumConstant(ost.str()); + expr_t cnode = AddNonNegativeConstant(ost.str()); if (neg) return AddUMinus(cnode); diff --git a/DynareBison.yy b/DynareBison.yy index bb88b36324611e7183cf86401f4345d03910d7fa..ae3948eb564c73ea503d4850f53c7a385d2d5055 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -163,11 +163,10 @@ class ParsingDriver; %type <node_val> expression expression_or_empty %type <node_val> equation hand_side -%type <string_val> signed_float signed_integer prior +%type <string_val> non_negative_number signed_number signed_integer %type <string_val> filename symbol expectation_input -%type <string_val> value value1 %type <string_val> vec_value_1 vec_value -%type <string_val> calib_arg2 range number +%type <string_val> calib_arg2 range prior %type <symbol_type_val> change_type_arg %type <vector_string_val> change_type_var_list %type <vector_int_val> vec_int_elem vec_int_1 vec_int vec_int_number @@ -395,10 +394,8 @@ expression : '(' expression ')' { $$ = $2;} | symbol { $$ = driver.add_expression_variable($1); } - | FLOAT_NUMBER - { $$ = driver.add_constant($1); } - | INT_NUMBER - { $$ = driver.add_constant($1); } + | non_negative_number + { $$ = driver.add_non_negative_constant($1); } | expression PLUS expression { $$ = driver.add_plus($1, $3); } | expression MINUS expression @@ -549,10 +546,8 @@ hand_side : '(' hand_side ')' { $$ = $2;} | symbol { $$ = driver.add_model_variable($1); } - | FLOAT_NUMBER - { $$ = driver.add_constant($1); } - | INT_NUMBER - { $$ = driver.add_constant($1); } + | non_negative_number + { $$ = driver.add_non_negative_constant($1); } | hand_side PLUS hand_side { $$ = driver.add_plus($1, $3); } | hand_side MINUS hand_side @@ -746,11 +741,11 @@ value_list : value_list COMMA '(' expression ')' { driver.add_value($3); } | '(' expression ')' { driver.add_value($2); } - | value_list COMMA signed_float + | value_list COMMA signed_number { driver.add_value($3); } - | value_list signed_float + | value_list signed_number { driver.add_value($2); } - | signed_float + | signed_number { driver.add_value($1); } ; @@ -762,21 +757,15 @@ triangular_matrix : triangular_matrix ';' triangular_row triangular_row : triangular_row COMMA '(' expression ')' { driver.add_to_row($4); } - | triangular_row COMMA FLOAT_NUMBER - { driver.add_to_row_const($3); } - | triangular_row COMMA INT_NUMBER + | triangular_row COMMA signed_number { driver.add_to_row_const($3); } | triangular_row '(' expression ')' { driver.add_to_row($3); } - | triangular_row FLOAT_NUMBER - { driver.add_to_row_const($2); } - | triangular_row INT_NUMBER + | triangular_row signed_number { driver.add_to_row_const($2); } | '(' expression ')' { driver.add_to_row($2); } - | FLOAT_NUMBER - { driver.add_to_row_const($1); } - | INT_NUMBER + | signed_number { driver.add_to_row_const($1); } ; @@ -925,17 +914,18 @@ signed_integer : PLUS INT_NUMBER | MINUS INT_NUMBER { $2->insert(0, "-"); $$ = $2; } | INT_NUMBER - { $$ = $1; } ; -signed_float : PLUS FLOAT_NUMBER +non_negative_number : INT_NUMBER + | FLOAT_NUMBER + ; + +signed_number : PLUS non_negative_number { $$ = $2; } - | MINUS FLOAT_NUMBER + | MINUS non_negative_number { $2->insert(0, "-"); $$ = $2; } - | FLOAT_NUMBER - { $$ = $1; } - | signed_integer - ; + | non_negative_number + ; estimated_params : ESTIMATED_PARAMS ';' estimated_list END ';' { driver.estimated_params(); }; @@ -1120,19 +1110,6 @@ prior : BETA_PDF { $$ = new string("6"); } ; -value : { $$ = new string("NaN"); } - | value1 - ; - -value1 : INT_NUMBER - | FLOAT_NUMBER - | symbol - | MINUS INT_NUMBER - { $2->insert(0, "-"); $$ = $2; } - | MINUS FLOAT_NUMBER - { $2->insert(0, "-"); $$ = $2; } - ; - estimation : ESTIMATION ';' { driver.run_estimation(); } | ESTIMATION '(' estimation_options_list ')' ';' @@ -1201,7 +1178,7 @@ estimation_options : o_datafile list_optim_option : QUOTED_STRING COMMA QUOTED_STRING { driver.optim_options_string($1, $3); } - | QUOTED_STRING COMMA value + | QUOTED_STRING COMMA signed_number { driver.optim_options_num($1, $3); } ; @@ -1268,9 +1245,7 @@ calib_arg1 : symbol calib_arg2 EQUAL expression ';' ; calib_arg2 : { $$ = new string("1"); } - | '(' INT_NUMBER ')' - { $$ = $2; } - | '(' FLOAT_NUMBER ')' + | '(' non_negative_number ')' { $$ = $2; } ; @@ -1323,22 +1298,20 @@ model_comparison : MODEL_COMPARISON mc_filename_list ';' ; filename : symbol - { $$ = $1; } | QUOTED_STRING - { $$ = $1; } ; mc_filename_list : filename { driver.add_mc_filename($1); } - | filename '(' value ')' + | filename '(' non_negative_number ')' { driver.add_mc_filename($1, $3); } | mc_filename_list filename { driver.add_mc_filename($2); } - | mc_filename_list filename '(' value ')' + | mc_filename_list filename '(' non_negative_number ')' { driver.add_mc_filename($2, $4); } | mc_filename_list COMMA filename { driver.add_mc_filename($3); } - | mc_filename_list COMMA filename '(' value ')' + | mc_filename_list COMMA filename '(' non_negative_number ')' { driver.add_mc_filename($3, $5); } ; @@ -1661,11 +1634,6 @@ forecast_option: o_periods | o_nograph ; - -number : INT_NUMBER - | FLOAT_NUMBER - ; - conditional_forecast : CONDITIONAL_FORECAST '(' conditional_forecast_options ')' ';' { driver.conditional_forecast(); } ; @@ -1737,13 +1705,13 @@ o_irf : IRF EQUAL INT_NUMBER { driver.option_num("irf", $3); }; o_hp_filter : HP_FILTER EQUAL INT_NUMBER { driver.option_num("hp_filter", $3); }; o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER { driver.option_num("hp_ngrid", $3); }; o_periods : PERIODS EQUAL INT_NUMBER { driver.option_num("periods", $3); }; -o_cutoff : CUTOFF EQUAL number { driver.cutoff($3); } -o_markowitz : MARKOWITZ EQUAL number { driver.option_num("markowitz", $3); }; -o_minimal_solving_periods : MINIMAL_SOLVING_PERIODS EQUAL number { driver.option_num("minimal_solving_periods", $3); }; +o_cutoff : CUTOFF EQUAL non_negative_number { driver.cutoff($3); } +o_markowitz : MARKOWITZ EQUAL non_negative_number { driver.option_num("markowitz", $3); }; +o_minimal_solving_periods : MINIMAL_SOLVING_PERIODS EQUAL non_negative_number { driver.option_num("minimal_solving_periods", $3); }; o_mfs : MFS EQUAL INT_NUMBER { driver.mfs($3); }; o_simul : SIMUL; // Do nothing, only here for backward compatibility o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.option_num("simul_seed", $3); } ; -o_qz_criterium : QZ_CRITERIUM EQUAL number { driver.option_num("qz_criterium", $3); }; +o_qz_criterium : QZ_CRITERIUM EQUAL non_negative_number { driver.option_num("qz_criterium", $3); }; o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); }; o_nobs : NOBS EQUAL vec_int { driver.option_vec_int("nobs", $3); } @@ -1765,24 +1733,24 @@ o_nograph : NOGRAPH | GRAPH { driver.option_num("nograph", "0"); } ; -o_conf_sig : CONF_SIG EQUAL number { driver.option_num("conf_sig", $3); }; +o_conf_sig : CONF_SIG EQUAL non_negative_number { driver.option_num("conf_sig", $3); }; o_mh_replic : MH_REPLIC EQUAL INT_NUMBER { driver.option_num("mh_replic", $3); }; -o_mh_drop : MH_DROP EQUAL number { driver.option_num("mh_drop", $3); }; -o_mh_jscale : MH_JSCALE EQUAL number { driver.option_num("mh_jscale", $3); }; +o_mh_drop : MH_DROP EQUAL non_negative_number { driver.option_num("mh_drop", $3); }; +o_mh_jscale : MH_JSCALE EQUAL non_negative_number { driver.option_num("mh_jscale", $3); }; o_optim : OPTIM EQUAL '(' optim_options ')'; -o_mh_init_scale : MH_INIT_SCALE EQUAL number { driver.option_num("mh_init_scale", $3); }; +o_mh_init_scale : MH_INIT_SCALE EQUAL non_negative_number { driver.option_num("mh_init_scale", $3); }; o_mode_file : MODE_FILE EQUAL filename { driver.option_str("mode_file", $3); }; o_mode_compute : MODE_COMPUTE EQUAL INT_NUMBER { driver.option_num("mode_compute", $3); }; | MODE_COMPUTE EQUAL symbol { driver.option_str("mode_compute", $3); }; o_mode_check : MODE_CHECK { driver.option_num("mode_check", "1"); }; -o_prior_trunc : PRIOR_TRUNC EQUAL number { driver.option_num("prior_trunc", $3); }; +o_prior_trunc : PRIOR_TRUNC EQUAL non_negative_number { driver.option_num("prior_trunc", $3); }; o_mh_mode : MH_MODE EQUAL INT_NUMBER { driver.option_num("mh_mode", $3); }; o_mh_nblocks : MH_NBLOCKS EQUAL INT_NUMBER { driver.option_num("mh_nblck", $3); }; o_load_mh_file : LOAD_MH_FILE { driver.option_num("load_mh_file", "1"); }; o_loglinear : LOGLINEAR { driver.option_num("loglinear", "1"); }; o_nodiagnostic : NODIAGNOSTIC { driver.option_num("nodiagnostic", "1"); }; o_bayesian_irf : BAYESIAN_IRF { driver.option_num("bayesian_irf", "1"); }; -o_dsge_var : DSGE_VAR EQUAL number +o_dsge_var : DSGE_VAR EQUAL non_negative_number { driver.option_num("dsge_var", $3); } | DSGE_VAR EQUAL INF_CONSTANT { driver.option_num("dsge_var", "Inf"); } @@ -1816,12 +1784,12 @@ o_plot_priors: PLOT_PRIORS {driver.option_num("plot_priors", "1"); }; o_aim_solver: AIM_SOLVER {driver.option_num("aim_solver", "1"); }; o_partial_information : PARTIAL_INFORMATION {driver.option_num("partial_information", "1"); }; -o_planner_discount : PLANNER_DISCOUNT EQUAL number { driver.option_num("planner_discount",$3); }; +o_planner_discount : PLANNER_DISCOUNT EQUAL non_negative_number { driver.option_num("planner_discount",$3); }; -o_bvar_prior_tau : BVAR_PRIOR_TAU EQUAL signed_float { driver.option_num("bvar_prior_tau", $3); }; -o_bvar_prior_decay : BVAR_PRIOR_DECAY EQUAL number { driver.option_num("bvar_prior_decay", $3); }; -o_bvar_prior_lambda : BVAR_PRIOR_LAMBDA EQUAL signed_float { driver.option_num("bvar_prior_lambda", $3); }; -o_bvar_prior_mu : BVAR_PRIOR_MU EQUAL number { driver.option_num("bvar_prior_mu", $3); }; +o_bvar_prior_tau : BVAR_PRIOR_TAU EQUAL signed_number { driver.option_num("bvar_prior_tau", $3); }; +o_bvar_prior_decay : BVAR_PRIOR_DECAY EQUAL non_negative_number { driver.option_num("bvar_prior_decay", $3); }; +o_bvar_prior_lambda : BVAR_PRIOR_LAMBDA EQUAL signed_number { driver.option_num("bvar_prior_lambda", $3); }; +o_bvar_prior_mu : BVAR_PRIOR_MU EQUAL non_negative_number { driver.option_num("bvar_prior_mu", $3); }; o_bvar_prior_omega : BVAR_PRIOR_OMEGA EQUAL INT_NUMBER { driver.option_num("bvar_prior_omega", $3); }; o_bvar_prior_flat : BVAR_PRIOR_FLAT { driver.option_num("bvar_prior_flat", "1"); }; o_bvar_prior_train : BVAR_PRIOR_TRAIN EQUAL INT_NUMBER { driver.option_num("bvar_prior_train", $3); }; @@ -1842,22 +1810,22 @@ o_gsa_nsam : NSAM EQUAL INT_NUMBER { driver.option_num("Nsam", $3); }; /* not in o_gsa_load_redform : LOAD_REDFORM EQUAL INT_NUMBER { driver.option_num("load_redform", $3); }; o_gsa_load_rmse : LOAD_RMSE EQUAL INT_NUMBER { driver.option_num("load_rmse", $3); }; o_gsa_load_stab : LOAD_STAB EQUAL INT_NUMBER { driver.option_num("load_stab", $3); }; -o_gsa_alpha2_stab : ALPHA2_STAB EQUAL number { driver.option_num("alpha2_stab", $3); }; -o_gsa_ksstat : KSSTAT EQUAL number { driver.option_num("ksstat", $3); }; +o_gsa_alpha2_stab : ALPHA2_STAB EQUAL non_negative_number { driver.option_num("alpha2_stab", $3); }; +o_gsa_ksstat : KSSTAT EQUAL non_negative_number { driver.option_num("ksstat", $3); }; o_gsa_logtrans_redform : LOGTRANS_REDFORM EQUAL INT_NUMBER { driver.option_num("logtrans_redform", $3); }; o_gsa_threshold_redform : THRESHOLD_REDFORM EQUAL vec_value { driver.option_num("threshold_redform",$3); }; -o_gsa_ksstat_redform : KSSTAT_REDFORM EQUAL number { driver.option_num("ksstat_redfrom", $3); }; -o_gsa_alpha2_redform : ALPHA2_REDFORM EQUAL number { driver.option_num("alpha2_redform", $3); }; +o_gsa_ksstat_redform : KSSTAT_REDFORM EQUAL non_negative_number { driver.option_num("ksstat_redfrom", $3); }; +o_gsa_alpha2_redform : ALPHA2_REDFORM EQUAL non_negative_number { driver.option_num("alpha2_redform", $3); }; o_gsa_namendo : NAMENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namendo"); }; o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namlagendo"); }; o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namexo"); }; o_gsa_rmse : RMSE EQUAL INT_NUMBER { driver.option_num("rmse", $3); }; o_gsa_lik_only : LIK_ONLY EQUAL INT_NUMBER { driver.option_num("lik_only", $3); }; o_gsa_var_rmse : VAR_RMSE EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("var_rmse"); }; -o_gsa_pfilt_rmse : PFILT_RMSE EQUAL number { driver.option_num("pfilt_rmse", $3); }; +o_gsa_pfilt_rmse : PFILT_RMSE EQUAL non_negative_number { driver.option_num("pfilt_rmse", $3); }; o_gsa_istart_rmse : ISTART_RMSE EQUAL INT_NUMBER { driver.option_num("istart_rmse", $3); }; -o_gsa_alpha_rmse : ALPHA_RMSE EQUAL number { driver.option_num("alpha_rmse", $3); }; -o_gsa_alpha2_rmse : ALPHA2_RMSE EQUAL number { driver.option_num("alpha2_rmse", $3); }; +o_gsa_alpha_rmse : ALPHA_RMSE EQUAL non_negative_number { driver.option_num("alpha_rmse", $3); }; +o_gsa_alpha2_rmse : ALPHA2_RMSE EQUAL non_negative_number { driver.option_num("alpha2_rmse", $3); }; o_gsa_trans_ident : TRANS_IDENT EQUAL INT_NUMBER { driver.option_num("trans_ident", $3); }; o_load_ident_files : LOAD_IDENT_FILES EQUAL INT_NUMBER { driver.option_num("load_ident_files", $3); } @@ -1903,11 +1871,11 @@ o_bayesian_prior : BAYESIAN_PRIOR EQUAL INT_NUMBER {driver.option_num("ms.bayesi o_dummy_obs : DUMMY_OBS EQUAL INT_NUMBER {driver.option_num("ms.dummy_obs",$3); }; o_nstates : NSTATES EQUAL INT_NUMBER {driver.option_num("ms.nstates",$3); }; o_indxscalesstates : INDXSCALESSTATES EQUAL INT_NUMBER {driver.option_num("ms.indxscalesstates",$3); }; -o_alpha : ALPHA EQUAL number {driver.option_num("ms.alpha",$3); }; -o_beta : BETA EQUAL number {driver.option_num("ms.beta",$3); }; +o_alpha : ALPHA EQUAL non_negative_number {driver.option_num("ms.alpha",$3); }; +o_beta : BETA EQUAL non_negative_number {driver.option_num("ms.beta",$3); }; o_gsig2_lmd : GSIG2_LMD EQUAL INT_NUMBER {driver.option_num("ms.gsig2_lmd",$3); }; o_gsig2_lmdm : GSIG2_LMDM EQUAL INT_NUMBER {driver.option_num("ms.gsig2_lmdm",$3); }; -o_q_diag : Q_DIAG EQUAL number {driver.option_num("ms.q_diag",$3); }; +o_q_diag : Q_DIAG EQUAL non_negative_number {driver.option_num("ms.q_diag",$3); }; o_flat_prior : FLAT_PRIOR EQUAL INT_NUMBER {driver.option_num("ms.flat_prior",$3); }; o_ncsk : NCSK EQUAL INT_NUMBER {driver.option_num("ms.ncsk",$3); }; o_nstd : NSTD EQUAL INT_NUMBER {driver.option_num("ms.nstd",$3); }; @@ -1952,7 +1920,7 @@ o_pruning : PRUNING { driver.option_num("pruning", "1"); }; o_chain : CHAIN EQUAL INT_NUMBER { driver.option_num("ms.chain",$3); }; o_state : STATE EQUAL INT_NUMBER { driver.option_num("ms.state",$3); }; -o_duration : DURATION EQUAL number +o_duration : DURATION EQUAL non_negative_number { driver.option_num("ms.duration",$3); } | DURATION EQUAL INF_CONSTANT { driver.option_num("ms.duration","Inf"); } @@ -2040,9 +2008,9 @@ vec_int : vec_int_1 ']' { $$ = $1; } ; -vec_value_1 : '[' value1 +vec_value_1 : '[' signed_number { $2->insert(0, "["); $$ = $2;} - | vec_value_1 value1 + | vec_value_1 signed_number { $1->append(" "); $1->append(*$2); diff --git a/ExprNode.cc b/ExprNode.cc index f652a98cee84cca28cdad3e525d0489930fdda8e..66a4c3a8f0f02ff32d608405706ab530ce94a568 100644 --- a/ExprNode.cc +++ b/ExprNode.cc @@ -314,7 +314,7 @@ NumConstNode::collectVariables(SymbolType type_arg, set<pair<int, int> > &result pair<int, expr_t > NumConstNode::normalizeEquation(int var_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const { - return (make_pair(0, datatree.AddNumConstant(datatree.num_constants.get(id)))); + return (make_pair(0, datatree.AddNonNegativeConstant(datatree.num_constants.get(id)))); } expr_t @@ -326,13 +326,13 @@ NumConstNode::getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recur expr_t NumConstNode::toStatic(DataTree &static_datatree) const { - return static_datatree.AddNumConstant(datatree.num_constants.get(id)); + return static_datatree.AddNonNegativeConstant(datatree.num_constants.get(id)); } expr_t NumConstNode::cloneDynamic(DataTree &dynamic_datatree) const { - return dynamic_datatree.AddNumConstant(datatree.num_constants.get(id)); + return dynamic_datatree.AddNonNegativeConstant(datatree.num_constants.get(id)); } int @@ -855,7 +855,7 @@ VariableNode::getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recur { map<int, expr_t> recursive_vars2(recursive_variables); recursive_vars2.erase(it->first); - //expr_t c = datatree.AddNumConstant("1"); + //expr_t c = datatree.AddNonNegativeConstant("1"); expr_t d = datatree.AddUMinus(it->second->getChainRuleDerivative(deriv_id, recursive_vars2)); //d = datatree.AddTimes(c, d); derivatives[deriv_id] = d; @@ -1709,7 +1709,7 @@ UnaryOpNode::normalizeEquation(int var_endo, vector<pair<int, pair<expr_t, expr_ List_of_Op_RHS.push_back(make_pair(oExp, make_pair((expr_t) NULL, (expr_t) NULL))); return (make_pair(1, (expr_t) NULL)); case oLog10: - List_of_Op_RHS.push_back(make_pair(oPower, make_pair((expr_t) NULL, datatree.AddNumConstant("10")))); + List_of_Op_RHS.push_back(make_pair(oPower, make_pair((expr_t) NULL, datatree.AddNonNegativeConstant("10")))); return (make_pair(1, (expr_t) NULL)); case oCos: return (make_pair(1, (expr_t) NULL)); diff --git a/ModFile.cc b/ModFile.cc index ab1eb655209c5f121d6a5e395a73f23d3d280a9e..0b5a20c259eb82664bce8619f76696cf72797713 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -248,7 +248,7 @@ ModFile::transformPass() int sid = symbol_table.addSymbol("dsge_prior_weight", eParameter); if (!mod_file_struct.dsge_var_calibrated.empty()) addStatementAtFront(new InitParamStatement(sid, - expressions_tree.AddNumConstant(mod_file_struct.dsge_var_calibrated), + expressions_tree.AddNonNegativeConstant(mod_file_struct.dsge_var_calibrated), symbol_table)); } catch (SymbolTable::AlreadyDeclaredException &e) diff --git a/NumericalConstants.cc b/NumericalConstants.cc index 3d83c1fb060006965f04d44d25b473b5daa275d8..58f1d2822912b3ffe1479618493e734e2778a532 100644 --- a/NumericalConstants.cc +++ b/NumericalConstants.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2009 Dynare Team + * Copyright (C) 2003-2010 Dynare Team * * This file is part of Dynare. * @@ -26,7 +26,7 @@ #include "NumericalConstants.hh" int -NumericalConstants::AddConstant(const string &iConst) +NumericalConstants::AddNonNegativeConstant(const string &iConst) { map<string, int>::const_iterator iter = numConstantsIndex.find(iConst); diff --git a/NumericalConstants.hh b/NumericalConstants.hh index 49adc774acb1b2a619142fea3a1711c466f88cd2..ceacc94b9bafc67c6f1f915da4d1426162a3af4e 100644 --- a/NumericalConstants.hh +++ b/NumericalConstants.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2009 Dynare Team + * Copyright (C) 2003-2010 Dynare Team * * This file is part of Dynare. * @@ -26,7 +26,7 @@ using namespace std; #include <vector> #include <map> -//! Handles numerical constants +//! Handles non-negative numerical constants class NumericalConstants { private: @@ -37,8 +37,8 @@ private: //! Map matching constants to their id map<string, int> numConstantsIndex; public: - //! Adds a constant and returns its ID - int AddConstant(const string &iConst); + //! Adds a non-negative constant (possibly Inf or NaN) and returns its ID + int AddNonNegativeConstant(const string &iConst); //! Get a constant in string form string get(int ID) const; //! Get a constant in double form diff --git a/ParsingDriver.cc b/ParsingDriver.cc index e3eb96a542fec3499e64268248f53899b8e272e2..012fa72e64ad774431c3fb986da2d91c0b9e3a1d 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -224,9 +224,9 @@ ParsingDriver::add_equation_tags(string *key, string *value) } expr_t -ParsingDriver::add_constant(string *constant) +ParsingDriver::add_non_negative_constant(string *constant) { - expr_t id = data_tree->AddNumConstant(*constant); + expr_t id = data_tree->AddNonNegativeConstant(*constant); delete constant; return id; } @@ -704,9 +704,9 @@ ParsingDriver::add_value(string *v) { expr_t id; if (v->at(0) == '-') - id = data_tree->AddUMinus(data_tree->AddNumConstant(v->substr(1, string::npos))); + id = data_tree->AddUMinus(data_tree->AddNonNegativeConstant(v->substr(1, string::npos))); else - id = data_tree->AddNumConstant(*v); + id = data_tree->AddNonNegativeConstant(*v); delete v; det_shocks_values.push_back(id); } @@ -814,9 +814,15 @@ ParsingDriver::end_of_row() } void -ParsingDriver::add_to_row_const(string *s) +ParsingDriver::add_to_row_const(string *v) { - sigmae_row.push_back(add_constant(s)); + expr_t id; + if (v->at(0) == '-') + id = data_tree->AddUMinus(data_tree->AddNonNegativeConstant(v->substr(1, string::npos))); + else + id = data_tree->AddNonNegativeConstant(*v); + delete v; + sigmae_row.push_back(id); } void diff --git a/ParsingDriver.hh b/ParsingDriver.hh index a84cf240c559922eeb7d6a6114a0b10c99cd4331..56d481aed0baf92ff182c54c75e9c2096d4b6c01 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -227,8 +227,8 @@ public: void change_type(SymbolType new_type, vector<string *> *var_list); //! Adds a list of tags for the current equation void add_equation_tags(string *key, string *value); - //! Adds a constant to DataTree - expr_t add_constant(string *constant); + //! Adds a non-negative constant to DataTree + expr_t add_non_negative_constant(string *constant); //! Adds a NaN constant to DataTree expr_t add_nan_constant(); //! Adds an Inf constant to DataTree @@ -290,7 +290,7 @@ public: //! Ends row of Sigma_e block void end_of_row(); //! Adds a constant element to current row of Sigma_e - void add_to_row_const(string *s); + void add_to_row_const(string *v); //! Adds an expression element to current row of Sigma_e void add_to_row(expr_t v); //! Write a steady command