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