From 644f1345ea8b380588cf69686add4901ec925f5a Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Wed, 10 May 2017 17:21:38 +0200 Subject: [PATCH] preprocessor: add var_estimation statement --- ComputingTasks.cc | 11 +++++++++++ ComputingTasks.hh | 9 +++++++++ DynareBison.yy | 8 +++++++- DynareFlex.ll | 1 + ParsingDriver.cc | 6 ++++++ ParsingDriver.hh | 2 ++ 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/ComputingTasks.cc b/ComputingTasks.cc index a4084a52..40e7a86f 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -236,6 +236,17 @@ 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) +{ +} + +void +VarEstimationStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const +{ + output << "oo_ = var_estimation('" << var_model_name << "', M_, options_, oo_);" << endl; +} + VarRestrictionsStatement::VarRestrictionsStatement(const string &var_model_name_arg, const map<int, map<int, SymbolList> > &exclusion_restrictions_arg, const equation_restrictions_t &equation_restrictions_arg, diff --git a/ComputingTasks.hh b/ComputingTasks.hh index 5175d7cd..ea4228b7 100644 --- a/ComputingTasks.hh +++ b/ComputingTasks.hh @@ -148,6 +148,15 @@ public: virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; }; +class VarEstimationStatement : public Statement +{ +private: + const string &var_model_name; +public: + VarEstimationStatement(const string &var_model_name_arg); + virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; +}; + class ForecastStatement : public Statement { private: diff --git a/DynareBison.yy b/DynareBison.yy index e8c3d871..298764f9 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -140,7 +140,7 @@ class ParsingDriver; %left UMINUS UPLUS %nonassoc POWER %token EXP LOG LN LOG10 SIN COS TAN ASIN ACOS ATAN SINH COSH TANH ERF -%token ASINH ACOSH ATANH SQRT NORMCDF NORMPDF STEADY_STATE EXPECTATION +%token ASINH ACOSH ATANH SQRT NORMCDF NORMPDF STEADY_STATE EXPECTATION VAR_ESTIMATION /* GSA analysis */ %token DYNARE_SENSITIVITY MORRIS STAB REDFORM PPRIOR PRIOR_RANGE PPOST ILPTAU MORRIS_NLIV %token MORRIS_NTRA NSAM LOAD_REDFORM LOAD_RMSE LOAD_STAB ALPHA2_STAB LOGTRANS_REDFORM THRESHOLD_REDFORM @@ -219,6 +219,7 @@ statement : parameters | simul | stoch_simul | estimation + | var_estimation | estimated_params | estimated_params_bounds | estimated_params_init @@ -451,6 +452,11 @@ restriction_exclusion_equation : EQUATION '(' symbol ')' symbol_list ';' { driver.add_VAR_restriction_exclusion_equation($3); } ; +var_estimation : VAR_ESTIMATION '(' symbol ')' ';' + { driver.run_var_estimation($3); } + ; + + nonstationary_var_list : nonstationary_var_list symbol { driver.declare_nonstationary_var($2); } | nonstationary_var_list COMMA symbol diff --git a/DynareFlex.ll b/DynareFlex.ll index 46b24dea..462e6893 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -114,6 +114,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 <INITIAL>periods {BEGIN DYNARE_STATEMENT; return token::PERIODS;} <INITIAL>model_info {BEGIN DYNARE_STATEMENT; return token::MODEL_INFO;} <INITIAL>estimation {BEGIN DYNARE_STATEMENT; return token::ESTIMATION;} +<INITIAL>var_estimation {BEGIN DYNARE_STATEMENT; return token::VAR_ESTIMATION;} <INITIAL>set_time {BEGIN DYNARE_STATEMENT; return token::SET_TIME;} <INITIAL>data {BEGIN DYNARE_STATEMENT; return token::DATA;} <INITIAL>varobs {BEGIN DYNARE_STATEMENT; return token::VAROBS;} diff --git a/ParsingDriver.cc b/ParsingDriver.cc index e3e7e4ba..49a6bd39 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -624,6 +624,12 @@ ParsingDriver::add_VAR_covariance_pair_restriction(string *name11, string *name1 delete name22; } +void +ParsingDriver::run_var_estimation(string *model_name) +{ + mod_file->addStatement(new VarEstimationStatement(*model_name)); +} + void ParsingDriver::periods(string *periods) { diff --git a/ParsingDriver.hh b/ParsingDriver.hh index af6a6865..16193c74 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -792,6 +792,8 @@ public: void add_VAR_restriction_equation_or_crossequation_final(string *name1, string *name2); 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); }; #endif // ! PARSING_DRIVER_HH -- GitLab