From b5089f2086102cdfc5f006d6cf2744a3c8102346 Mon Sep 17 00:00:00 2001 From: michel <michel@ac1d8469-bf42-47a9-8791-bf33cf982152> Date: Thu, 1 May 2008 12:04:48 +0000 Subject: [PATCH] v4: added forecast, updated dynare_m.exe git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1812 ac1d8469-bf42-47a9-8791-bf33cf982152 --- ComputingTasks.cc | 26 ++++++++++++++++++++++++++ DynareBison.yy | 15 +++++++++++++++ DynareFlex.ll | 1 + ParsingDriver.cc | 8 ++++++++ include/ComputingTasks.hh | 12 ++++++++++++ include/ParsingDriver.hh | 2 ++ 6 files changed, 64 insertions(+) diff --git a/ComputingTasks.cc b/ComputingTasks.cc index 18d8c3d1..a12118cf 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -164,6 +164,32 @@ StochSimulStatement::writeOutput(ostream &output, const string &basename) const output << "info = stoch_simul(var_list_);\n"; } +ForecastStatement::ForecastStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg) : + symbol_list(symbol_list_arg), + options_list(options_list_arg) +{ +} + +void +ForecastStatement::checkPass(ModFileStructure &mod_file_struct) +{ + mod_file_struct.stoch_simul_or_similar_present = true; + + // Fill in option_order of mod_file_struct + OptionsList::num_options_type::const_iterator it = options_list.num_options.find("order"); + if (it != options_list.num_options.end()) + mod_file_struct.order_option = max(mod_file_struct.order_option,atoi(it->second.c_str())); +} + +void +ForecastStatement::writeOutput(ostream &output, const string &basename) const +{ + options_list.writeOutput(output); + symbol_list.writeOutput("var_list_", output); + output << "info = forecast(var_list_,'simul');\n"; +} + RamseyPolicyStatement::RamseyPolicyStatement(const SymbolList &symbol_list_arg, const OptionsList &options_list_arg) : symbol_list(symbol_list_arg), diff --git a/DynareBison.yy b/DynareBison.yy index 63c630f9..4763a914 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -189,6 +189,7 @@ statement : declaration | bvar_forecast | dynare_sensitivity | homotopy_setup + | forecast ; declaration : parameters @@ -1276,6 +1277,20 @@ homotopy_item : NAME COMMA expression COMMA expression ';' { driver.homotopy_val($1, NULL, $3);} ; +forecast: FORECAST ';' {driver.forecast();} + | FORECAST '(' forecast_options ')' ';' {driver.forecast();} + | FORECAST symbol_list ';' {driver.forecast();} + | FORECAST '(' forecast_options ')' symbol_list ';' {driver.forecast();} + ; + +forecast_options: forecast_option + | forecast_options COMMA forecast_option + ; + +forecast_option: o_periods + | o_conf_sig + ; + number : INT_NUMBER | FLOAT_NUMBER ; diff --git a/DynareFlex.ll b/DynareFlex.ll index 7777be24..6508b3e9 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -130,6 +130,7 @@ int sigma_e = 0; <INITIAL>bvar_forecast {BEGIN DYNARE_STATEMENT; return token::BVAR_FORECAST; } <INITIAL>dynare_sensitivity {BEGIN DYNARE_STATEMENT; return token::DYNARE_SENSITIVITY;} <INITIAL>initval_file {BEGIN DYNARE_STATEMENT; return token::INITVAL_FILE;} +<INITIAL>forecast {BEGIN DYNARE_STATEMENT; return token::FORECAST;} /* End of a Dynare statement */ <DYNARE_STATEMENT>; { diff --git a/ParsingDriver.cc b/ParsingDriver.cc index b6378479..1fdafef9 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -350,6 +350,14 @@ ParsingDriver::homotopy_val(string *name, NodeID val1, NodeID val2) delete name; } +void +ParsingDriver::forecast() +{ + mod_file->addStatement(new ForecastStatement(symbol_list, options_list)); + symbol_list.clear(); + options_list.clear(); +} + void ParsingDriver::use_dll() { diff --git a/include/ComputingTasks.hh b/include/ComputingTasks.hh index 55b0c3b6..aae31cf6 100644 --- a/include/ComputingTasks.hh +++ b/include/ComputingTasks.hh @@ -88,6 +88,18 @@ public: virtual void writeOutput(ostream &output, const string &basename) const; }; +class ForecastStatement : public Statement +{ +private: + const SymbolList symbol_list; + const OptionsList options_list; +public: + ForecastStatement(const SymbolList &symbol_list_arg, + const OptionsList &options_list_arg); + virtual void checkPass(ModFileStructure &mod_file_struct); + virtual void writeOutput(ostream &output, const string &basename) const; +}; + class RamseyPolicyStatement : public Statement { private: diff --git a/include/ParsingDriver.hh b/include/ParsingDriver.hh index 1462d1ad..d13dd504 100644 --- a/include/ParsingDriver.hh +++ b/include/ParsingDriver.hh @@ -304,6 +304,8 @@ public: void optim_options_num(string *name, string *value); //! Prints varops instructions void set_varobs(); + //! Forecast Statement + void forecast(); void set_trends(); void set_trend_element(string *arg1, NodeID arg2); void set_unit_root_vars(); -- GitLab