diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index 9b6e68b98391a8ad6f0e0933606751cd0446a62b..1d034895287aa453a3f023c8fce6fce7b713a7ca 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -2461,7 +2461,7 @@ BVARDensityStatement::writeOutput(ostream &output, [[maybe_unused]] const string [[maybe_unused]] bool minimal_workspace) const { options_list.writeOutput(output); - output << "bvar_density(" << maxnlags << ");" << endl; + output << "bvar.density(" << maxnlags << ");" << endl; } void @@ -2494,7 +2494,7 @@ BVARForecastStatement::writeOutput(ostream &output, [[maybe_unused]] const strin [[maybe_unused]] bool minimal_workspace) const { options_list.writeOutput(output); - output << "bvar_forecast(" << nlags << ");" << endl; + output << "bvar.forecast(" << nlags << ");" << endl; } void @@ -2509,6 +2509,33 @@ BVARForecastStatement::writeJsonOutput(ostream &output) const output << "}"; } +BVARIRFStatement::BVARIRFStatement(int nirf_arg, string identificationname_arg) : + nirf{nirf_arg}, + identificationname{move(identificationname_arg)} +{ +} + +void +BVARIRFStatement::checkPass(ModFileStructure &mod_file_struct, + [[maybe_unused]] WarningConsolidation &warnings) +{ + mod_file_struct.bvar_present = true; +} + +void +BVARIRFStatement::writeOutput(ostream &output, [[maybe_unused]] const string &basename, + [[maybe_unused]] bool minimal_workspace) const +{ + output << "bvar.irf(" << nirf << ",'" << identificationname << "');" << endl; +} + +void +BVARIRFStatement::writeJsonOutput(ostream &output) const +{ + output << R"({"statementName": "bvar_irf")"; + output << "}"; +} + SBVARStatement::SBVARStatement(OptionsList options_list_arg) : options_list{move(options_list_arg)} { diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index 1c8f65fa838ce61d2c7bdc9f43ecfceb4d78b764..16569217358efd56e22d388baa7bbc832df18a61 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -609,6 +609,18 @@ public: void writeJsonOutput(ostream &output) const override; }; +class BVARIRFStatement : public Statement +{ +private: + const int nirf; + const string identificationname; +public: + BVARIRFStatement(int nirf_arg, string identificationname_arg); + void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; + void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; + void writeJsonOutput(ostream &output) const override; +}; + class SBVARStatement : public Statement { private: diff --git a/src/DynareBison.yy b/src/DynareBison.yy index a7d5058311e005632348e5afa110fea79b1ff486..ed10756b1945d7b65bf73229d885fe355143e9a1 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -75,7 +75,7 @@ class ParsingDriver; %token AIM_SOLVER ANALYTIC_DERIVATION ANALYTIC_DERIVATION_MODE AR POSTERIOR_SAMPLING_METHOD %token BALANCED_GROWTH_TEST_TOL BAYESIAN_IRF BETA_PDF BLOCK USE_CALIBRATION SILENT_OPTIMIZER -%token BVAR_DENSITY BVAR_FORECAST NODECOMPOSITION DR_DISPLAY_TOL HUGE_NUMBER FIG_NAME WRITE_XLS +%token BVAR_DENSITY BVAR_FORECAST BVAR_IRF NODECOMPOSITION DR_DISPLAY_TOL HUGE_NUMBER FIG_NAME WRITE_XLS %token BVAR_PRIOR_DECAY BVAR_PRIOR_FLAT BVAR_PRIOR_LAMBDA INTERACTIVE SCREEN_SHOCKS STEADYSTATE %token BVAR_PRIOR_MU BVAR_PRIOR_OMEGA BVAR_PRIOR_TAU BVAR_PRIOR_TRAIN DETAIL_PLOT TYPE %token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED PROPOSAL_DISTRIBUTION REALTIME VINTAGE @@ -298,6 +298,7 @@ statement : parameters | discretionary_policy | bvar_density | bvar_forecast + | bvar_irf | sbvar | dynare_sensitivity | homotopy_setup @@ -2769,6 +2770,9 @@ bvar_forecast : BVAR_FORECAST INT_NUMBER ';' { driver.bvar_forecast($5); } ; +bvar_irf : BVAR_IRF '(' INT_NUMBER COMMA QUOTED_STRING ')' ';' + { driver.bvar_irf($3, $5); } + sbvar_option : o_datafile | o_freq | o_initial_year diff --git a/src/DynareFlex.ll b/src/DynareFlex.ll index dfdf1ec1addb4be48a52216d615b7a5181972247..c18feca8420c8203162971353314d65ab31c5a2d 100644 --- a/src/DynareFlex.ll +++ b/src/DynareFlex.ll @@ -151,6 +151,7 @@ DATE -?[0-9]+([ya]|m([1-9]|1[0-2])|q[1-4]) <INITIAL>bvar_density {BEGIN DYNARE_STATEMENT; return token::BVAR_DENSITY; } <INITIAL>bvar_forecast {BEGIN DYNARE_STATEMENT; return token::BVAR_FORECAST; } +<INITIAL>bvar_irf {BEGIN DYNARE_STATEMENT; return token::BVAR_IRF; } <INITIAL>dynare_sensitivity {BEGIN DYNARE_STATEMENT; return token::DYNARE_SENSITIVITY;} <INITIAL>initval_file {BEGIN DYNARE_STATEMENT; return token::INITVAL_FILE;} <INITIAL>histval_file {BEGIN DYNARE_STATEMENT; return token::HISTVAL_FILE;} diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index 1eef9a4d51b55d1a3dd4e45013cee629748aabe6..314167085ac946bc09a472342ab301b2e078bc76 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -2334,6 +2334,12 @@ ParsingDriver::bvar_forecast(const string &nlags) options_list.clear(); } +void +ParsingDriver::bvar_irf(const string &nirf, string identificationname) +{ + mod_file->addStatement(make_unique<BVARIRFStatement>(stoi(nirf), move(identificationname))); +} + void ParsingDriver::sbvar() { diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh index 222496c9af192c3c04b2613325ff6138b6e5b3c1..7ccee5e3462bc3b3732da77da0c34f3bb0e24685 100644 --- a/src/ParsingDriver.hh +++ b/src/ParsingDriver.hh @@ -678,6 +678,8 @@ public: void bvar_density(const string &maxnlags); //! BVAR forecast void bvar_forecast(const string &nlags); + //! BVAR IRF + void bvar_irf(const string &nirf, string identificationname); //! SBVAR statement void sbvar(); //! Markov Switching Statement: Estimation