diff --git a/ComputingTasks.cc b/ComputingTasks.cc index 40e7a86fa5cc62bfe69aa4f692258e568e69c744..f60fd7c8dd451899e049d823e74200df545c3083 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -236,15 +236,27 @@ VarModelStatement::createVarModelMFunction(ostream &output, const map<string, se output << ");" << endl; } -VarEstimationStatement::VarEstimationStatement(const string &var_model_name_arg) : - var_model_name(var_model_name_arg) +VarEstimationStatement::VarEstimationStatement(const OptionsList &options_list_arg) : + options_list(options_list_arg) { } +void +VarEstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) +{ + OptionsList::string_options_t::const_iterator it = options_list.string_options.find("var_estimation.model_name"); + if (it == options_list.string_options.end()) + { + cerr << "ERROR: You must provide the model name to the var_estimation statement." << endl; + exit(EXIT_FAILURE); + } +} + void VarEstimationStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const { - output << "oo_ = var_estimation('" << var_model_name << "', M_, options_, oo_);" << endl; + options_list.writeOutput(output); + output << "oo_ = var_estimation(M_, options_, oo_);" << endl; } VarRestrictionsStatement::VarRestrictionsStatement(const string &var_model_name_arg, diff --git a/ComputingTasks.hh b/ComputingTasks.hh index ea4228b73d8d7f313d605080e1a9eb3efdda7752..e4a219c66368eaf17e9ce293e7d1c0e377e33bcf 100644 --- a/ComputingTasks.hh +++ b/ComputingTasks.hh @@ -151,9 +151,10 @@ public: class VarEstimationStatement : public Statement { private: - const string &var_model_name; + const OptionsList options_list; public: - VarEstimationStatement(const string &var_model_name_arg); + VarEstimationStatement(const OptionsList &options_list_arg); + virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; }; diff --git a/DynareBison.yy b/DynareBison.yy index 298764f9caf5dc7cbe6d8dec43b573939a665255..b9757d96b79a077b6e56558f7ca344140c6e2c6d 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -452,10 +452,17 @@ restriction_exclusion_equation : EQUATION '(' symbol ')' symbol_list ';' { driver.add_VAR_restriction_exclusion_equation($3); } ; -var_estimation : VAR_ESTIMATION '(' symbol ')' ';' - { driver.run_var_estimation($3); } +var_estimation : VAR_ESTIMATION '(' var_estimation_options_list ')' ';' + { driver.run_var_estimation(); } ; +var_estimation_options_list : var_estimation_options_list COMMA var_estimation_options + | var_estimation_options + ; + +var_estimation_options : o_var_datafile + | o_var_model_name + ; nonstationary_var_list : nonstationary_var_list symbol { driver.declare_nonstationary_var($2); } @@ -2995,6 +3002,8 @@ o_var_nobs : NOBS EQUAL INT_NUMBER { driver.option_num("var.nobs", $3); }; o_var_method : METHOD EQUAL symbol { driver.option_num("var.method", $3); }; o_series : SERIES EQUAL symbol { driver.option_str("series", $3); }; o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); }; +o_var_datafile : DATAFILE EQUAL filename { driver.option_str("var_estimation.datafile", $3); }; +o_var_model_name : symbol { driver.option_str("var_estimation.model_name", $1); }; o_dirname : DIRNAME EQUAL filename { driver.option_str("dirname", $3); }; o_huge_number : HUGE_NUMBER EQUAL non_negative_number { driver.option_num("huge_number", $3); }; o_nobs : NOBS EQUAL vec_int diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 49a6bd3984bee92d1ff6bf4696b3f751aac03995..d718732b7db3e921db161eac9379a6d80874c7b9 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -625,9 +625,9 @@ ParsingDriver::add_VAR_covariance_pair_restriction(string *name11, string *name1 } void -ParsingDriver::run_var_estimation(string *model_name) +ParsingDriver::run_var_estimation() { - mod_file->addStatement(new VarEstimationStatement(*model_name)); + mod_file->addStatement(new VarEstimationStatement(options_list)); } void diff --git a/ParsingDriver.hh b/ParsingDriver.hh index 16193c743330b91b58a9239c69ba9948e80f9283..c6ff4cfddd0847ca5f843cc4e177cdfb546c59d8 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -793,7 +793,7 @@ public: void add_VAR_covariance_number_restriction(string *name1, string *name2, string *valuestr); void add_VAR_covariance_pair_restriction(string *name11, string *name12, string *name21, string *name22); //! Runs VAR estimation process - void run_var_estimation(string *model_name); + void run_var_estimation(); }; #endif // ! PARSING_DRIVER_HH