diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index d06309a24e0bb93d4386dd634fd0fd20d998d8fd..a6d2c561645240d9322c15fba5c0cf3f065be94a 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -333,10 +333,11 @@ PriorPosteriorFunctionStatement::writeJsonOutput(ostream &output) const output << "}"; } -StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : +StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -373,11 +374,9 @@ StochSimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli exit(EXIT_FAILURE); } - symbol_list.removeDuplicates("stoch_simul", warnings); - try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -418,10 +417,11 @@ StochSimulStatement::writeJsonOutput(ostream &output) const output << "}"; } -ForecastStatement::ForecastStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : +ForecastStatement::ForecastStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -430,7 +430,7 @@ ForecastStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -620,9 +620,11 @@ RamseyConstraintsStatement::writeJsonOutput(ostream &output) const } RamseyPolicyStatement::RamseyPolicyStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -668,7 +670,7 @@ RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConso try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -733,9 +735,11 @@ EvaluatePlannerObjectiveStatement::writeJsonOutput(ostream &output) const } DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -783,7 +787,7 @@ DiscretionaryPolicyStatement::checkPass(ModFileStructure &mod_file_struct, Warni try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -1042,7 +1046,7 @@ EstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -1145,8 +1149,10 @@ DynareSensitivityStatement::writeJsonOutput(ostream &output) const output << "}"; } -RplotStatement::RplotStatement(SymbolList symbol_list_arg) : - symbol_list{move(symbol_list_arg)} +RplotStatement::RplotStatement(SymbolList symbol_list_arg, + const SymbolTable &symbol_table_arg) : + symbol_list{move(symbol_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -1155,7 +1161,7 @@ RplotStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidatio { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous}); + symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous}, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2024,7 +2030,7 @@ OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolid try { - symbol_list.checkPass(warnings, { SymbolType::parameter }); + symbol_list.checkPass(warnings, { SymbolType::parameter }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2040,7 +2046,7 @@ OsrParamsStatement::writeOutput(ostream &output, const string &basename, bool mi output << "M_.osr.param_names = cellstr(M_.osr.param_names);" << endl << "M_.osr.param_indices = zeros(length(M_.osr.param_names), 1);" << endl; int i = 0; - vector<string> symbols = symbol_list.get_symbols(); + vector<string> symbols = symbol_list.getSymbols(); for (auto &symbol : symbols) output << "M_.osr.param_indices(" << ++i <<") = " << symbol_table.getTypeSpecificID(symbol) + 1 << ";" << endl; } @@ -2109,10 +2115,11 @@ OsrParamsBoundsStatement::writeJsonOutput(ostream &output) const << "}"; } -OsrStatement::OsrStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : +OsrStatement::OsrStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -2139,7 +2146,7 @@ OsrStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2253,10 +2260,11 @@ OptimWeightsStatement::writeJsonOutput(ostream &output) const << "}"; } -DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg, - string filename_arg) : +DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg, string filename_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - filename{move(filename_arg)} + filename{move(filename_arg)}, + symbol_table{symbol_table_arg} { } @@ -2265,7 +2273,7 @@ DynaSaveStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2295,10 +2303,11 @@ DynaSaveStatement::writeJsonOutput(ostream &output) const output << "}"; } -DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg, - string filename_arg) : +DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg, string filename_arg, + const SymbolTable &symbol_table_arg) : symbol_list(move(symbol_list_arg)), - filename(move(filename_arg)) + filename(move(filename_arg)), + symbol_table{symbol_table_arg} { } @@ -2307,7 +2316,7 @@ DynaTypeStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2687,10 +2696,11 @@ MSSBVARComputeProbabilitiesStatement::writeJsonOutput(ostream &output) const output << "}"; } -MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : +MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -2714,7 +2724,7 @@ MSSBVARIrfStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -2976,9 +2986,11 @@ WriteLatexSteadyStateModelStatement::writeJsonOutput(ostream &output) const } ShockDecompositionStatement::ShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -2991,7 +3003,7 @@ ShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, Warnin try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -3026,9 +3038,11 @@ ShockDecompositionStatement::writeJsonOutput(ostream &output) const } RealtimeShockDecompositionStatement::RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -3041,7 +3055,7 @@ RealtimeShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -3076,9 +3090,11 @@ RealtimeShockDecompositionStatement::writeJsonOutput(ostream &output) const } PlotShockDecompositionStatement::PlotShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -3087,7 +3103,7 @@ PlotShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, Wa { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue }); + symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -3123,9 +3139,11 @@ PlotShockDecompositionStatement::writeJsonOutput(ostream &output) const } InitialConditionDecompositionStatement::InitialConditionDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) : + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : symbol_list{move(symbol_list_arg)}, - options_list{move(options_list_arg)} + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -3138,7 +3156,7 @@ InitialConditionDecompositionStatement::checkPass(ModFileStructure &mod_file_str try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -3173,8 +3191,10 @@ InitialConditionDecompositionStatement::writeJsonOutput(ostream &output) const output << "}"; } -SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg) - : symbol_list{move(symbol_list_arg)} +SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg, + const SymbolTable &symbol_table_arg) : + symbol_list{move(symbol_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -3184,7 +3204,7 @@ SqueezeShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -3251,9 +3271,12 @@ ConditionalForecastStatement::writeJsonOutput(ostream &output) const output << "}"; } -PlotConditionalForecastStatement::PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg) : +PlotConditionalForecastStatement::PlotConditionalForecastStatement(int periods_arg, + SymbolList symbol_list_arg, + const SymbolTable &symbol_table_arg) : periods{periods_arg}, - symbol_list{move(symbol_list_arg)} + symbol_list{move(symbol_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -3263,7 +3286,7 @@ PlotConditionalForecastStatement::checkPass(ModFileStructure &mod_file_struct, { try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { @@ -4826,8 +4849,11 @@ OptionsEqualStatement::writeOutput(ostream &output, const string &basename, bool } CalibSmootherStatement::CalibSmootherStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg) - : symbol_list{move(symbol_list_arg)}, options_list{move(options_list_arg)} + OptionsList options_list_arg, + const SymbolTable &symbol_table_arg) : + symbol_list{move(symbol_list_arg)}, + options_list{move(options_list_arg)}, + symbol_table{symbol_table_arg} { } @@ -4837,7 +4863,7 @@ CalibSmootherStatement::checkPass(ModFileStructure &mod_file_struct, WarningCons mod_file_struct.calib_smoother_present = true; try { - symbol_list.checkPass(warnings, { SymbolType::endogenous }); + symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table); } catch (SymbolList::SymbolListException &e) { diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index 542e9777b15fa468d3ccb8c7cf949cbaf7b1c3b9..e7502f650baddc01de5e89e5c4ac12f6b205ee1c 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -130,11 +130,12 @@ public: class StochSimulStatement : public Statement { private: - SymbolList symbol_list; + const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - StochSimulStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + StochSimulStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -145,9 +146,10 @@ class ForecastStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - ForecastStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + ForecastStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -189,9 +191,10 @@ class RamseyPolicyStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - RamseyPolicyStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + RamseyPolicyStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -254,9 +257,10 @@ class DiscretionaryPolicyStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - DiscretionaryPolicyStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + DiscretionaryPolicyStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -266,8 +270,9 @@ class RplotStatement : public Statement { private: const SymbolList symbol_list; + const SymbolTable &symbol_table; public: - explicit RplotStatement(SymbolList symbol_list_arg); + RplotStatement(SymbolList symbol_list_arg, const SymbolTable &symbol_table_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; @@ -386,9 +391,10 @@ class OsrStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - OsrStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + OsrStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -426,9 +432,10 @@ class DynaTypeStatement : public Statement private: const SymbolList symbol_list; const string filename; + const SymbolTable &symbol_table; public: - DynaTypeStatement(SymbolList symbol_list_arg, - string filename_arg); + DynaTypeStatement(SymbolList symbol_list_arg, string filename_arg, + const SymbolTable &symbol_table_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; @@ -439,9 +446,10 @@ class DynaSaveStatement : public Statement private: const SymbolList symbol_list; const string filename; + const SymbolTable &symbol_table; public: - DynaSaveStatement(SymbolList symbol_list_arg, - string filename_arg); + DynaSaveStatement(SymbolList symbol_list_arg, string filename_arg, + const SymbolTable &symbol_table_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; @@ -671,9 +679,10 @@ class MSSBVARIrfStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - MSSBVARIrfStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + MSSBVARIrfStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -761,9 +770,10 @@ class ShockDecompositionStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - ShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + ShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -774,9 +784,10 @@ class RealtimeShockDecompositionStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -787,9 +798,10 @@ class PlotShockDecompositionStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - PlotShockDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + PlotShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -800,9 +812,10 @@ class InitialConditionDecompositionStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - InitialConditionDecompositionStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + InitialConditionDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; @@ -812,8 +825,10 @@ class SqueezeShockDecompositionStatement : public Statement { private: const SymbolList symbol_list; + const SymbolTable &symbol_table; public: - explicit SqueezeShockDecompositionStatement(SymbolList symbol_list_arg); + SqueezeShockDecompositionStatement(SymbolList symbol_list_arg, + const SymbolTable &symbol_table_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; @@ -836,8 +851,10 @@ private: //! A value of -1 indicates that the user didn't specify a value const int periods; const SymbolList symbol_list; + const SymbolTable &symbol_table; public: - PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg); + PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg, + const SymbolTable &symbol_table_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; @@ -848,9 +865,10 @@ class CalibSmootherStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const SymbolTable &symbol_table; public: - CalibSmootherStatement(SymbolList symbol_list_arg, - OptionsList options_list_arg); + CalibSmootherStatement(SymbolList symbol_list_arg, OptionsList options_list_arg, + const SymbolTable &symbol_table_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; diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 1d746a1b18ff1ef22d755ba9314cd0755942c35d..8b5f97b9a091d0261e823babb1be75aa90b3d96e 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -203,12 +203,12 @@ class ParsingDriver; %type <string> name_value_pair_with_suboptions name_value_pair_with_suboptions_list %type <SymbolType> change_type_arg %type <vector<string>> vec_str vec_str_1 -%type <vector<string>> change_type_var_list +%type <vector<string>> symbol_list symbol_list_or_wildcard %type <vector<int>> vec_int_elem vec_int_1 vec_int vec_int_number %type <PriorDistributions> prior_pdf prior_distribution %type <pair<expr_t,expr_t>> calibration_range -%type <pair<string,string>> named_var_elem subsamples_eq_opt integer_range_w_inf -%type <vector<pair<string,string>>> named_var named_var_1 tag_pair_list_for_selection +%type <pair<string,string>> partition_elem subsamples_eq_opt integer_range_w_inf +%type <vector<pair<string,string>>> partition partition_1 tag_pair_list_for_selection symbol_list_with_tex %type <tuple<string,string,string,string>> prior_eq_opt options_eq_opt %type <vector<pair<int, int>>> period_list %type <vector<expr_t>> matched_moments_list value_list @@ -217,6 +217,7 @@ class ParsingDriver; %type <map<string, expr_t>> occbin_constraints_regime_options_list %type <pair<string, expr_t>> occbin_constraints_regime_option %type <PacTargetKind> pac_target_kind +%type <vector<tuple<string, string, vector<pair<string, string>>>>> symbol_list_with_tex_and_partition %% %start statement_list; @@ -361,52 +362,143 @@ dsample : DSAMPLE INT_NUMBER ';' { driver.dsample($2, $3); } ; -rplot : RPLOT symbol_list ';' { driver.rplot(); }; +symbol_list : symbol_list symbol + { + $$ = $1; + $$.push_back($2); + } + | symbol_list COMMA symbol + { + $$ = $1; + $$.push_back($3); + } + | symbol + { $$ = { $1 }; } + ; + +symbol_list_or_wildcard : symbol_list + | ':' + { $$ = { ":" }; } + ; + +symbol_list_with_tex : symbol_list_with_tex symbol + { + $$ = $1; + $$.emplace_back($2, ""); + } + | symbol_list_with_tex COMMA symbol + { + $$ = $1; + $$.emplace_back($3, ""); + } + | symbol + { $$ = { { $1, "" }}; } + | symbol_list_with_tex symbol TEX_NAME + { + $$ = $1; + $$.emplace_back($2, $3); + } + | symbol_list_with_tex COMMA symbol TEX_NAME + { + $$ = $1; + $$.emplace_back($3, $4); + } + | symbol TEX_NAME + { $$ = { { $1, $2 } }; } + ; -trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' trend_var_list ';' - { driver.end_trend_var($6); } +partition_elem : symbol EQUAL QUOTED_STRING + { $$ = { $1, $3 }; } + +partition_1 : '(' partition_elem + { $$ = { $2 }; } + | '(' COMMA partition_elem + { $$ = { $3 }; } + | partition_1 partition_elem + { + $$ = $1; + $$.push_back($2); + } + | partition_1 COMMA partition_elem + { + $$ = $1; + $$.push_back($3); + } + ; + +partition : partition_1 ')' + | partition_1 COMMA ')' ; -trend_var_list : trend_var_list symbol - { driver.declare_trend_var(false, $2); } - | trend_var_list COMMA symbol - { driver.declare_trend_var(false, $3); } - | symbol - { driver.declare_trend_var(false, $1); } - | trend_var_list symbol TEX_NAME - { driver.declare_trend_var(false, $2, $3); } - | trend_var_list COMMA symbol TEX_NAME - { driver.declare_trend_var(false, $3, $4); } - | symbol TEX_NAME - { driver.declare_trend_var(false, $1, $2); } - ; +symbol_list_with_tex_and_partition : symbol_list_with_tex_and_partition symbol + { + $$ = $1; + $$.emplace_back($2, "", vector<pair<string,string>>{}); + } + | symbol_list_with_tex_and_partition COMMA symbol + { + $$ = $1; + $$.emplace_back($3, "", vector<pair<string,string>>{}); + } + | symbol + { $$ = { { $1, "", {} }}; } + | symbol_list_with_tex_and_partition symbol partition + { + $$ = $1; + $$.emplace_back($2, "", $3); + } + | symbol_list_with_tex_and_partition COMMA symbol partition + { + $$ = $1; + $$.emplace_back($3, "", $4); + } + | symbol partition + { $$ = { { $1, "", $2 }}; } + | symbol_list_with_tex_and_partition symbol TEX_NAME + { + $$ = $1; + $$.emplace_back($2, $3, vector<pair<string,string>>{}); + } + | symbol_list_with_tex_and_partition COMMA symbol TEX_NAME + { + $$ = $1; + $$.emplace_back($3, $4, vector<pair<string,string>>{}); + } + | symbol TEX_NAME + { $$ = { { $1, $2, {} }}; } + | symbol_list_with_tex_and_partition symbol TEX_NAME partition + { + $$ = $1; + $$.emplace_back($2, $3, $4); + } + | symbol_list_with_tex_and_partition COMMA symbol TEX_NAME partition + { + $$ = $1; + $$.emplace_back($3, $4, $5); + } + | symbol TEX_NAME partition + { $$ = { { $1, $2, $3 }}; } + ; -log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' log_trend_var_list ';' - { driver.end_trend_var($6); } - ; +rplot : RPLOT symbol_list ';' { driver.rplot($2); }; -log_trend_var_list : log_trend_var_list symbol - { driver.declare_trend_var(true, $2); } - | log_trend_var_list COMMA symbol - { driver.declare_trend_var(true, $3); } - | symbol - { driver.declare_trend_var(true, $1); } - | log_trend_var_list symbol TEX_NAME - { driver.declare_trend_var(true, $2, $3); } - | log_trend_var_list COMMA symbol TEX_NAME - { driver.declare_trend_var(true, $3, $4); } - | symbol TEX_NAME - { driver.declare_trend_var(true, $1, $2); } - ; +trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex ';' + { driver.end_trend_var(false, $6, $8); } + ; -var : VAR var_list ';' - | VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' nonstationary_var_list ';' - { driver.end_nonstationary_var(false, $6); } - | VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' nonstationary_var_list ';' - { driver.end_nonstationary_var(true, $6); } +log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex ';' + { driver.end_trend_var(true, $6, $8); } + ; + +var : VAR symbol_list_with_tex_and_partition ';' + { driver.var($2); } + | VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';' + { driver.end_nonstationary_var(false, $6, $8); } + | VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';' + { driver.end_nonstationary_var(true, $6, $8); } ; -var_remove : VAR_REMOVE symbol_list ';' { driver.var_remove(); }; +var_remove : VAR_REMOVE symbol_list ';' { driver.var_remove($2); }; var_model : VAR_MODEL '(' var_model_options_list ')' ';' { driver.var_model(); } ; @@ -476,194 +568,27 @@ var_expectation_model_option : VARIABLE EQUAL symbol { driver.option_num("time_shift", $3); } ; -nonstationary_var_list : nonstationary_var_list symbol - { driver.declare_nonstationary_var($2); } - | nonstationary_var_list COMMA symbol - { driver.declare_nonstationary_var($3); } - | symbol - { driver.declare_nonstationary_var($1); } - | nonstationary_var_list symbol named_var - { driver.declare_nonstationary_var($2, "", $3); } - | nonstationary_var_list COMMA symbol named_var - { driver.declare_nonstationary_var($3, "", $4); } - | symbol named_var - { driver.declare_nonstationary_var($1, "", $2); } - | nonstationary_var_list symbol TEX_NAME - { driver.declare_nonstationary_var($2, $3); } - | nonstationary_var_list COMMA symbol TEX_NAME - { driver.declare_nonstationary_var($3, $4); } - | symbol TEX_NAME - { driver.declare_nonstationary_var($1, $2); } - | nonstationary_var_list symbol TEX_NAME named_var - { driver.declare_nonstationary_var($2, $3, $4); } - | nonstationary_var_list COMMA symbol TEX_NAME named_var - { driver.declare_nonstationary_var($3, $4, $5); } - | symbol TEX_NAME named_var - { driver.declare_nonstationary_var($1, $2, $3); } - ; - -varexo : VAREXO varexo_list ';' +varexo : VAREXO symbol_list_with_tex_and_partition ';' + { driver.varexo($2); } ; -varexo_det : VAREXO_DET varexo_det_list ';'; - -predetermined_variables : PREDETERMINED_VARIABLES predetermined_variables_list ';'; - -parameters : PARAMETERS parameter_list ';'; +varexo_det : VAREXO_DET symbol_list_with_tex_and_partition ';' + { driver.varexo_det($2); } ; -model_local_variable : MODEL_LOCAL_VARIABLE model_local_variable_list ';'; - -named_var_elem : symbol EQUAL QUOTED_STRING - { $$ = { $1, $3 }; } - -named_var_1 : '(' named_var_elem - { $$ = { $2 }; } - | '(' COMMA named_var_elem - { $$ = { $3 }; } - | named_var_1 named_var_elem - { - $$ = $1; - $$.push_back($2); - } - | named_var_1 COMMA named_var_elem - { - $$ = $1; - $$.push_back($3); - } - ; - -named_var : named_var_1 ')' - | named_var_1 COMMA ')' - ; - -var_list : var_list symbol - { driver.declare_endogenous($2); } - | var_list COMMA symbol - { driver.declare_endogenous($3); } - | symbol - { driver.declare_endogenous($1); } - | var_list symbol named_var - { driver.declare_endogenous($2, "", $3); } - | var_list COMMA symbol named_var - { driver.declare_endogenous($3, "", $4); } - | symbol named_var - { driver.declare_endogenous($1, "", $2); } - | var_list symbol TEX_NAME - { driver.declare_endogenous($2, $3); } - | var_list COMMA symbol TEX_NAME - { driver.declare_endogenous($3, $4); } - | symbol TEX_NAME - { driver.declare_endogenous($1, $2); } - | var_list symbol TEX_NAME named_var - { driver.declare_endogenous($2, $3, $4); } - | var_list COMMA symbol TEX_NAME named_var - { driver.declare_endogenous($3, $4, $5); } - | symbol TEX_NAME named_var - { driver.declare_endogenous($1, $2, $3); } - ; - -varexo_list : varexo_list symbol - { driver.declare_exogenous($2); } - | varexo_list COMMA symbol - { driver.declare_exogenous($3); } - | symbol - { driver.declare_exogenous($1); } - | varexo_list symbol named_var - { driver.declare_exogenous($2, "", $3); } - | varexo_list COMMA symbol named_var - { driver.declare_exogenous($3, "", $4); } - | symbol named_var - { driver.declare_exogenous($1, "", $2); } - | varexo_list symbol TEX_NAME - { driver.declare_exogenous($2, $3); } - | varexo_list COMMA symbol TEX_NAME - { driver.declare_exogenous($3, $4); } - | symbol TEX_NAME - { driver.declare_exogenous($1, $2); } - | varexo_list symbol TEX_NAME named_var - { driver.declare_exogenous($2, $3, $4); } - | varexo_list COMMA symbol TEX_NAME named_var - { driver.declare_exogenous($3, $4, $5); } - | symbol TEX_NAME named_var - { driver.declare_exogenous($1, $2, $3); } - ; - -varexo_det_list : varexo_det_list symbol - { driver.declare_exogenous_det($2); } - | varexo_det_list COMMA symbol - { driver.declare_exogenous_det($3); } - | symbol - { driver.declare_exogenous_det($1); } - | varexo_det_list symbol named_var - { driver.declare_exogenous_det($2, "", $3); } - | varexo_det_list COMMA symbol named_var - { driver.declare_exogenous_det($3, "", $4); } - | symbol named_var - { driver.declare_exogenous_det($1, "", $2); } - | varexo_det_list symbol TEX_NAME - { driver.declare_exogenous_det($2, $3); } - | varexo_det_list COMMA symbol TEX_NAME - { driver.declare_exogenous_det($3, $4); } - | symbol TEX_NAME - { driver.declare_exogenous_det($1, $2); } - | varexo_det_list symbol TEX_NAME named_var - { driver.declare_exogenous_det($2, $3, $4); } - | varexo_det_list COMMA symbol TEX_NAME named_var - { driver.declare_exogenous_det($3, $4, $5); } - | symbol TEX_NAME named_var - { driver.declare_exogenous_det($1, $2, $3); } - ; - -parameter_list : parameter_list symbol - { driver.declare_parameter($2); } - | parameter_list COMMA symbol - { driver.declare_parameter($3); } - | symbol - { driver.declare_parameter($1); } - | parameter_list symbol named_var - { driver.declare_parameter($2, "", $3); } - | parameter_list COMMA symbol named_var - { driver.declare_parameter($3, "", $4); } - | symbol named_var - { driver.declare_parameter($1, "", $2); } - | parameter_list symbol TEX_NAME - { driver.declare_parameter($2, $3); } - | parameter_list COMMA symbol TEX_NAME - { driver.declare_parameter($3, $4); } - | symbol TEX_NAME - { driver.declare_parameter($1, $2); } - | parameter_list symbol TEX_NAME named_var - { driver.declare_parameter($2, $3, $4); } - | parameter_list COMMA symbol TEX_NAME named_var - { driver.declare_parameter($3, $4, $5); } - | symbol TEX_NAME named_var - { driver.declare_parameter($1, $2, $3); } - ; +predetermined_variables : PREDETERMINED_VARIABLES symbol_list ';' + { driver.predetermined_variables($2); } + ; -predetermined_variables_list : predetermined_variables_list symbol - { driver.add_predetermined_variable($2); } - | predetermined_variables_list COMMA symbol - { driver.add_predetermined_variable($3); } - | symbol - { driver.add_predetermined_variable($1); } - ; +parameters : PARAMETERS symbol_list_with_tex_and_partition ';' + { driver.parameters($2); } + ; -model_local_variable_list : model_local_variable_list symbol - { driver.declare_model_local_variable($2); } - | model_local_variable_list COMMA symbol - { driver.declare_model_local_variable($3); } - | symbol - { driver.declare_model_local_variable($1); } - | model_local_variable_list symbol TEX_NAME - { driver.declare_model_local_variable($2, $3); } - | model_local_variable_list COMMA symbol TEX_NAME - { driver.declare_model_local_variable($3, $4); } - | symbol TEX_NAME - { driver.declare_model_local_variable($1, $2); } - ; +model_local_variable : MODEL_LOCAL_VARIABLE symbol_list_with_tex ';' + { driver.model_local_variable($2); } + ; -change_type : CHANGE_TYPE '(' change_type_arg ')' change_type_var_list ';' +change_type : CHANGE_TYPE '(' change_type_arg ')' symbol_list ';' { driver.change_type($3, $5); } ; @@ -677,20 +602,6 @@ change_type_arg : PARAMETERS { $$ = SymbolType::exogenousDet; } ; -change_type_var_list : symbol - { $$ = { $1 }; } - | change_type_var_list symbol - { - $$ = $1; - $$.push_back($2); - } - | change_type_var_list COMMA symbol - { - $$ = $1; - $$.push_back($3); - } - ; - periods : PERIODS INT_NUMBER ';' { driver.periods($2); } | PERIODS EQUAL INT_NUMBER ';' @@ -1013,7 +924,7 @@ model_option : BLOCK { driver.block(); } | USE_DLL { driver.use_dll(); } | NO_STATIC { driver.no_static();} | DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); } - | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); } + | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some($4); } | o_linear | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')' | BALANCED_GROWTH_TEST_TOL EQUAL non_negative_number { driver.balanced_growth_test_tol($3); } @@ -1278,18 +1189,12 @@ svar_identification_elem : EXCLUSION LAG INT_NUMBER ';' svar_equation_list { driver.add_lower_cholesky(); } ; -svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA svar_var_list ';' - { driver.add_restriction_in_equation($3); } - | EQUATION INT_NUMBER COMMA svar_var_list ';' - { driver.add_restriction_in_equation($2); } +svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA symbol_list ';' + { driver.add_restriction_in_equation($3, $5); } + | EQUATION INT_NUMBER COMMA symbol_list ';' + { driver.add_restriction_in_equation($2, $4); } ; -svar_var_list : svar_var_list COMMA symbol - { driver.add_in_svar_restriction_symbols($3); } - | symbol - { driver.add_in_svar_restriction_symbols($1); } - ; - restriction_expression : expression {driver.check_restriction_expression_constant($1);} | restriction_expression_1 ; @@ -1676,13 +1581,13 @@ external_function_options : o_ext_func_name ; stoch_simul : STOCH_SIMUL ';' - { driver.stoch_simul(); } + { driver.stoch_simul({}); } | STOCH_SIMUL '(' stoch_simul_options_list ')' ';' - { driver.stoch_simul(); } + { driver.stoch_simul({}); } | STOCH_SIMUL symbol_list ';' - { driver.stoch_simul(); } + { driver.stoch_simul($2); } | STOCH_SIMUL '(' stoch_simul_options_list ')' symbol_list ';' - { driver.stoch_simul(); } + { driver.stoch_simul($5); } ; stoch_simul_options_list : stoch_simul_options_list COMMA stoch_simul_options @@ -1749,19 +1654,6 @@ stoch_simul_options : stoch_simul_primary_options | o_one_sided_hp_filter ; -symbol_list : symbol_list symbol - { driver.add_in_symbol_list($2); } - | symbol_list COMMA symbol - { driver.add_in_symbol_list($3); } - | symbol - { driver.add_in_symbol_list($1); } - ; - -symbol_list_ext : symbol_list - | ':' - { driver.add_in_symbol_list(":"); } - ; - signed_integer : PLUS INT_NUMBER { $$ = $2; } | MINUS INT_NUMBER @@ -2187,13 +2079,13 @@ options_eq_opt : symbol '.' OPTIONS ; estimation : ESTIMATION ';' - { driver.run_estimation(); } + { driver.run_estimation({}); } | ESTIMATION '(' estimation_options_list ')' ';' - { driver.run_estimation(); } + { driver.run_estimation({}); } | ESTIMATION symbol_list ';' - { driver.run_estimation(); } + { driver.run_estimation($2); } | ESTIMATION '(' estimation_options_list ')' symbol_list ';' - { driver.run_estimation(); } + { driver.run_estimation($5); } ; estimation_options_list : estimation_options_list COMMA estimation_options @@ -2426,7 +2318,7 @@ optim_weights_list : optim_weights_list symbol expression ';' { driver.set_optim_weights($1, $3, $4); } ; -osr_params : OSR_PARAMS symbol_list ';' { driver.set_osr_params(); }; +osr_params : OSR_PARAMS symbol_list ';' { driver.set_osr_params($2); }; osr_options_list : osr_options_list COMMA osr_options @@ -2443,25 +2335,25 @@ osr_options : stoch_simul_primary_options ; osr : OSR ';' - { driver.run_osr(); } + { driver.run_osr({}); } | OSR '(' osr_options_list ')' ';' - { driver.run_osr(); } + { driver.run_osr({}); } | OSR symbol_list ';' - { driver.run_osr(); } + { driver.run_osr($2); } | OSR '(' osr_options_list ')' symbol_list ';' - {driver.run_osr(); } + {driver.run_osr($5); } ; dynatype : DYNATYPE '(' filename ')' ';' - { driver.run_dynatype($3); } + { driver.run_dynatype($3, {}); } | DYNATYPE '(' filename ')' symbol_list ';' - { driver.run_dynatype($3); } + { driver.run_dynatype($3, $5); } ; dynasave : DYNASAVE '(' filename ')' ';' - { driver.run_dynasave($3); } + { driver.run_dynasave($3, {}); } | DYNASAVE '(' filename ')' symbol_list ';' - { driver.run_dynasave($3); } + { driver.run_dynasave($3, $5); } ; load_params_and_steady_state : LOAD_PARAMS_AND_STEADY_STATE '(' filename ')' ';' @@ -2569,13 +2461,13 @@ ramsey_model : RAMSEY_MODEL ';' ; ramsey_policy : RAMSEY_POLICY ';' - { driver.ramsey_policy(); } + { driver.ramsey_policy({}); } | RAMSEY_POLICY '(' ramsey_policy_options_list ')' ';' - { driver.ramsey_policy(); } + { driver.ramsey_policy({}); } | RAMSEY_POLICY symbol_list ';' - { driver.ramsey_policy(); } + { driver.ramsey_policy($2); } | RAMSEY_POLICY '(' ramsey_policy_options_list ')' symbol_list ';' - { driver.ramsey_policy(); } + { driver.ramsey_policy($5); } ; ramsey_constraints : RAMSEY_CONSTRAINTS ';' ramsey_constraints_list END ';' @@ -2648,8 +2540,7 @@ occbin_solver : OCCBIN_SOLVER ';' { driver.occbin_solver(); } | OCCBIN_SOLVER '(' occbin_solver_options_list ')' ';' { driver.occbin_solver(); } - | OCCBIN_SOLVER '(' occbin_solver_options_list ')' symbol_list ';' - { driver.occbin_solver(); } + ; occbin_solver_options_list : occbin_solver_option COMMA occbin_solver_options_list | occbin_solver_option @@ -2679,13 +2570,13 @@ occbin_write_regimes_option : o_occbin_write_regimes_periods ; occbin_graph : OCCBIN_GRAPH ';' - { driver.occbin_graph(); } + { driver.occbin_graph({}); } | OCCBIN_GRAPH '(' occbin_graph_options_list ')' ';' - { driver.occbin_graph(); } + { driver.occbin_graph({}); } | OCCBIN_GRAPH symbol_list ';' - { driver.occbin_graph(); } + { driver.occbin_graph($2); } | OCCBIN_GRAPH '(' occbin_graph_options_list ')' symbol_list ';' - { driver.occbin_graph(); } + { driver.occbin_graph($5); } ; occbin_graph_options_list : occbin_graph_option COMMA occbin_graph_options_list @@ -2695,13 +2586,13 @@ occbin_graph_options_list : occbin_graph_option COMMA occbin_graph_options_list occbin_graph_option : o_occbin_graph_noconstant ; discretionary_policy : DISCRETIONARY_POLICY ';' - { driver.discretionary_policy(); } + { driver.discretionary_policy({}); } | DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';' - { driver.discretionary_policy(); } + { driver.discretionary_policy({}); } | DISCRETIONARY_POLICY symbol_list ';' - { driver.discretionary_policy(); } + { driver.discretionary_policy($2); } | DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' symbol_list ';' - { driver.discretionary_policy(); } + { driver.discretionary_policy($5); } ; discretionary_policy_options_list : discretionary_policy_options_list COMMA discretionary_policy_options @@ -2754,49 +2645,49 @@ write_latex_steady_state_model : WRITE_LATEX_STEADY_STATE_MODEL ';' ; shock_decomposition : SHOCK_DECOMPOSITION ';' - {driver.shock_decomposition(); } + { driver.shock_decomposition({}); } | SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' ';' - { driver.shock_decomposition(); } + { driver.shock_decomposition({}); } | SHOCK_DECOMPOSITION symbol_list ';' - { driver.shock_decomposition(); } + { driver.shock_decomposition($2); } | SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' symbol_list ';' - { driver.shock_decomposition(); } + { driver.shock_decomposition($5); } ; realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';' - {driver.realtime_shock_decomposition(); } + { driver.realtime_shock_decomposition({}); } | REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' ';' - { driver.realtime_shock_decomposition(); } + { driver.realtime_shock_decomposition({}); } | REALTIME_SHOCK_DECOMPOSITION symbol_list ';' - { driver.realtime_shock_decomposition(); } + { driver.realtime_shock_decomposition($2); } | REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' symbol_list ';' - { driver.realtime_shock_decomposition(); } + { driver.realtime_shock_decomposition($5); } ; plot_shock_decomposition : PLOT_SHOCK_DECOMPOSITION ';' - {driver.plot_shock_decomposition(); } + { driver.plot_shock_decomposition({}); } | PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' ';' - { driver.plot_shock_decomposition(); } + { driver.plot_shock_decomposition({}); } | PLOT_SHOCK_DECOMPOSITION symbol_list ';' - { driver.plot_shock_decomposition(); } + { driver.plot_shock_decomposition($2); } | PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' symbol_list ';' - { driver.plot_shock_decomposition(); } + { driver.plot_shock_decomposition($5); } ; initial_condition_decomposition : INITIAL_CONDITION_DECOMPOSITION ';' - {driver.initial_condition_decomposition(); } + { driver.initial_condition_decomposition({}); } | INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' ';' - { driver.initial_condition_decomposition(); } + { driver.initial_condition_decomposition({}); } | INITIAL_CONDITION_DECOMPOSITION symbol_list ';' - { driver.initial_condition_decomposition(); } + { driver.initial_condition_decomposition($2); } | INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' symbol_list ';' - { driver.initial_condition_decomposition(); } + { driver.initial_condition_decomposition($5); } ; squeeze_shock_decomposition : SQUEEZE_SHOCK_DECOMPOSITION ';' - { driver.squeeze_shock_decomposition(); } + { driver.squeeze_shock_decomposition({}); } | SQUEEZE_SHOCK_DECOMPOSITION symbol_list ';' - { driver.squeeze_shock_decomposition(); } + { driver.squeeze_shock_decomposition($2); } ; bvar_prior_option : o_bvar_prior_tau @@ -2979,13 +2870,13 @@ ms_irf_options_list : ms_irf_option COMMA ms_irf_options_list ; ms_irf : MS_IRF ';' - { driver.ms_irf(); } + { driver.ms_irf({}); } | MS_IRF '(' ms_irf_options_list ')' ';' - { driver.ms_irf(); } + { driver.ms_irf({}); } | MS_IRF symbol_list ';' - { driver.ms_irf(); } + { driver.ms_irf($2); } | MS_IRF '(' ms_irf_options_list ')' symbol_list ';' - { driver.ms_irf(); } + { driver.ms_irf($5); } ; ms_compute_probabilities_option : o_output_file_tag @@ -3253,11 +3144,15 @@ homotopy_item : symbol COMMA expression COMMA expression ';' { driver.homotopy_val($1, nullptr, $3);} ; -forecast: FORECAST ';' {driver.forecast();} - | FORECAST '(' forecast_options ')' ';' {driver.forecast();} - | FORECAST symbol_list ';' {driver.forecast();} - | FORECAST '(' forecast_options ')' symbol_list ';' {driver.forecast();} - ; +forecast: FORECAST ';' + { driver.forecast({}); } + | FORECAST '(' forecast_options ')' ';' + { driver.forecast({}); } + | FORECAST symbol_list ';' + { driver.forecast($2); } + | FORECAST '(' forecast_options ')' symbol_list ';' + { driver.forecast($5); } + ; forecast_options: forecast_option | forecast_options COMMA forecast_option @@ -3286,9 +3181,9 @@ conditional_forecast_option : o_periods ; plot_conditional_forecast : PLOT_CONDITIONAL_FORECAST symbol_list ';' - { driver.plot_conditional_forecast(); } + { driver.plot_conditional_forecast("", $2); } | PLOT_CONDITIONAL_FORECAST '(' PERIODS EQUAL INT_NUMBER ')' symbol_list ';' - { driver.plot_conditional_forecast($5); } + { driver.plot_conditional_forecast($5, $7); } ; conditional_forecast_paths : CONDITIONAL_FORECAST_PATHS ';' conditional_forecast_paths_shock_list END ';' @@ -3314,17 +3209,17 @@ steady_state_equation_list : steady_state_equation_list steady_state_equation steady_state_equation : symbol EQUAL expression ';' { driver.add_steady_state_model_equal($1, $3); } | '[' symbol_list ']' EQUAL expression ';' - { driver.add_steady_state_model_equal_multiple($5); } + { driver.add_steady_state_model_equal_multiple($2, $5); } ; calib_smoother : CALIB_SMOOTHER ';' - { driver.calib_smoother(); } + { driver.calib_smoother({}); } | CALIB_SMOOTHER '(' calib_smoother_options_list ')' ';' - { driver.calib_smoother(); } + { driver.calib_smoother({}); } | CALIB_SMOOTHER symbol_list ';' - { driver.calib_smoother(); } + { driver.calib_smoother($2); } | CALIB_SMOOTHER '(' calib_smoother_options_list ')' symbol_list ';' - { driver.calib_smoother(); } + { driver.calib_smoother($5); } ; calib_smoother_options_list : calib_smoother_option COMMA calib_smoother_options_list @@ -3520,7 +3415,7 @@ o_nocorr : NOCORR { driver.option_num("nocorr", "true"); }; o_nofunctions : NOFUNCTIONS { driver.option_num("nofunctions", "true"); }; o_nomoments : NOMOMENTS { driver.option_num("nomoments", "true"); }; o_irf : IRF EQUAL INT_NUMBER { driver.option_num("irf", $3); }; -o_irf_shocks : IRF_SHOCKS EQUAL '(' symbol_list ')' { driver.option_symbol_list("irf_shocks"); }; +o_irf_shocks : IRF_SHOCKS EQUAL '(' symbol_list ')' { driver.option_symbol_list("irf_shocks", $4); }; o_hp_filter : HP_FILTER EQUAL non_negative_number { driver.option_num("hp_filter", $3); }; o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER { driver.warning("The 'hp_ngrid' option is deprecated. It has been superseded by the 'filtered_theoretical_moments_grid' option."); @@ -3872,12 +3767,12 @@ o_gsa_logtrans_redform : LOGTRANS_REDFORM EQUAL INT_NUMBER { driver.option_num(" o_gsa_threshold_redform : THRESHOLD_REDFORM EQUAL vec_value_w_inf { driver.option_num("threshold_redform",$3); }; o_gsa_ksstat_redform : KSSTAT_REDFORM EQUAL non_negative_number { driver.option_num("ksstat_redform", $3); }; o_gsa_alpha2_redform : ALPHA2_REDFORM EQUAL non_negative_number { driver.option_num("alpha2_redform", $3); }; -o_gsa_namendo : NAMENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namendo"); }; -o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namlagendo"); }; -o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namexo"); }; +o_gsa_namendo : NAMENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namendo", $4); }; +o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namlagendo", $4); }; +o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namexo", $4); }; o_gsa_rmse : RMSE EQUAL INT_NUMBER { driver.option_num("rmse", $3); }; o_gsa_lik_only : LIK_ONLY EQUAL INT_NUMBER { driver.option_num("lik_only", $3); }; -o_gsa_var_rmse : VAR_RMSE EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("var_rmse"); }; +o_gsa_var_rmse : VAR_RMSE EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("var_rmse", $4); }; o_gsa_pfilt_rmse : PFILT_RMSE EQUAL non_negative_number { driver.option_num("pfilt_rmse", $3); }; o_gsa_istart_rmse : ISTART_RMSE EQUAL INT_NUMBER { driver.option_num("istart_rmse", $3); }; o_gsa_alpha_rmse : ALPHA_RMSE EQUAL non_negative_number { driver.option_num("alpha_rmse", $3); }; @@ -3901,7 +3796,7 @@ o_homotopy_steps : HOMOTOPY_STEPS EQUAL INT_NUMBER {driver.option_num("homotopy_ o_homotopy_force_continue: HOMOTOPY_FORCE_CONTINUE EQUAL INT_NUMBER { driver.option_num("homotopy_force_continue",$3); }; o_nocheck : NOCHECK {driver.option_num("steadystate.nocheck","true"); }; -o_controlled_varexo : CONTROLLED_VAREXO EQUAL '(' symbol_list ')' { driver.option_symbol_list("controlled_varexo"); }; +o_controlled_varexo : CONTROLLED_VAREXO EQUAL '(' symbol_list ')' { driver.option_symbol_list("controlled_varexo", $4); }; o_parameter_set : PARAMETER_SET EQUAL PRIOR_MODE { driver.option_str("parameter_set", "prior_mode"); } | PARAMETER_SET EQUAL PRIOR_MEAN @@ -3934,7 +3829,7 @@ o_final_year : FINAL_YEAR EQUAL INT_NUMBER {driver.option_num("ms.final_year",$3 o_final_subperiod : FINAL_SUBPERIOD EQUAL INT_NUMBER {driver.option_num("ms.final_subperiod",$3); }; o_data : DATA EQUAL filename { driver.option_str("ms.data", $3); }; o_vlist : VLIST EQUAL INT_NUMBER {driver.option_num("ms.vlist",$3); }; -o_vlistlog : VLISTLOG EQUAL '(' symbol_list ')' {driver.option_symbol_list("ms.vlistlog"); }; +o_vlistlog : VLISTLOG EQUAL '(' symbol_list ')' {driver.option_symbol_list("ms.vlistlog", $4); }; o_vlistper : VLISTPER EQUAL INT_NUMBER {driver.option_num("ms.vlistper",$3); }; o_restriction_fname : RESTRICTION_FNAME EQUAL NAME { @@ -4005,7 +3900,7 @@ o_duration : DURATION EQUAL non_negative_number ; o_number_of_regimes : NUMBER_OF_REGIMES EQUAL INT_NUMBER { driver.option_num("ms.number_of_regimes",$3); }; o_number_of_lags : NUMBER_OF_LAGS EQUAL INT_NUMBER { driver.option_num("ms.number_of_lags",$3); }; -o_parameters : PARAMETERS EQUAL '[' symbol_list ']' { driver.option_symbol_list("ms.parameters"); }; +o_parameters : PARAMETERS EQUAL '[' symbol_list ']' { driver.option_symbol_list("ms.parameters", $4); }; o_coefficients : COEFFICIENTS { driver.option_str("ms.coefficients","svar_coefficients"); }; o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); }; o_equations : EQUATIONS EQUAL vec_int @@ -4014,7 +3909,7 @@ o_equations : EQUATIONS EQUAL vec_int { driver.option_vec_int("ms.equations",$3); } ; o_silent_optimizer : SILENT_OPTIMIZER { driver.option_num("silent_optimizer", "true"); }; -o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments"); }; +o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments", $4); }; o_ext_func_name : EXT_FUNC_NAME EQUAL namespace_qualified_filename { driver.external_function_option("name", $3); }; o_ext_func_nargs : EXT_FUNC_NARGS EQUAL INT_NUMBER { driver.external_function_option("nargs",$3); }; @@ -4130,10 +4025,10 @@ o_consider_only_observed : CONSIDER_ONLY_OBSERVED { driver.option_str("endo_vars o_no_homotopy : NO_HOMOTOPY { driver.option_num("no_homotopy", "true"); }; o_infile : INFILE EQUAL filename { driver.option_str("infile", $3); }; -o_invars : INVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("invars"); }; +o_invars : INVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("invars", $4); }; o_period : PERIOD EQUAL INT_NUMBER { driver.option_num("period", $3); }; o_outfile : OUTFILE EQUAL filename { driver.option_str("outfile", $3); }; -o_outvars : OUTVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("outvars"); }; +o_outvars : OUTVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("outvars", $4); }; o_lmmcp : LMMCP {driver.option_num("lmmcp.status", "true"); }; o_function : FUNCTION EQUAL filename { driver.option_str("function", $3); }; o_sampling_draws : SAMPLING_DRAWS EQUAL INT_NUMBER { driver.option_num("sampling_draws",$3); }; diff --git a/src/ModelEquationBlock.cc b/src/ModelEquationBlock.cc index ecd0042dda699445f61eed4aefa77671e7eb37de..ad5a52b22830f626fd829411808f31b270f14293 100644 --- a/src/ModelEquationBlock.cc +++ b/src/ModelEquationBlock.cc @@ -492,8 +492,8 @@ Epilogue::writeOutput(ostream &output) const for (const auto & [symb_id, expr] : dynamic_def_table) expr->collectVariables(SymbolType::endogenous, endogs); - SymbolList symbol_list; + vector<string> symbol_list; for (auto symb_id : endogs) - symbol_list.addSymbol(symbol_table.getName(symb_id)); - symbol_list.writeOutput("M_.epilogue_var_list_", output); + symbol_list.push_back(symbol_table.getName(symb_id)); + SymbolList{move(symbol_list)}.writeOutput("M_.epilogue_var_list_", output); } diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index 48b200ec85f57dadf0c9ff0bf05b1c7389ad55c6..80c776e016e836b02d28108a623199736aaa402a 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -91,8 +91,6 @@ ParsingDriver::parse(istream &in, bool debug) { mod_file = make_unique<ModFile>(warnings); - symbol_list.setSymbolTable(mod_file->symbol_table); - reset_data_tree(); estim_params.init(*data_tree); osr_params.init(*data_tree); @@ -201,6 +199,13 @@ ParsingDriver::declare_endogenous(const string &name, const string &tex_name, co declare_symbol(name, SymbolType::endogenous, tex_name, partition_value); } +void +ParsingDriver::var(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list) +{ + for (auto &[name, tex_name, partition] : symbol_list) + declare_endogenous(name, tex_name, partition); +} + void ParsingDriver::declare_exogenous(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value) { @@ -208,9 +213,17 @@ ParsingDriver::declare_exogenous(const string &name, const string &tex_name, con } void -ParsingDriver::declare_exogenous_det(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value) +ParsingDriver::varexo(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list) +{ + for (auto &[name, tex_name, partition] : symbol_list) + declare_exogenous(name, tex_name, partition); +} + +void +ParsingDriver::varexo_det(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list) { - declare_symbol(name, SymbolType::exogenousDet, tex_name, partition_value); + for (auto &[name, tex_name, partition] : symbol_list) + declare_symbol(name, SymbolType::exogenousDet, tex_name, partition); } void @@ -219,6 +232,13 @@ ParsingDriver::declare_parameter(const string &name, const string &tex_name, con declare_symbol(name, SymbolType::parameter, tex_name, partition_value); } +void +ParsingDriver::parameters(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list) +{ + for (auto &[name, tex_name, partition] : symbol_list) + declare_parameter(name, tex_name, partition); +} + void ParsingDriver::declare_statement_local_variable(const string &name) { @@ -247,15 +267,15 @@ ParsingDriver::begin_trend() } void -ParsingDriver::declare_trend_var(bool log_trend, const string &name, const string &tex_name) +ParsingDriver::end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list) { - declare_symbol(name, log_trend ? SymbolType::logTrend : SymbolType::trend, tex_name, {}); - declared_trend_vars.push_back(mod_file->symbol_table.getID(name)); -} + vector<int> declared_trend_vars; + for (auto &[name, tex_name] : symbol_list) + { + declare_symbol(name, log_trend ? SymbolType::logTrend : SymbolType::trend, tex_name, {}); + declared_trend_vars.push_back(mod_file->symbol_table.getID(name)); + } -void -ParsingDriver::end_trend_var(expr_t growth_factor) -{ try { dynamic_model->addTrendVariables(declared_trend_vars, growth_factor); @@ -269,11 +289,14 @@ ParsingDriver::end_trend_var(expr_t growth_factor) } void -ParsingDriver::add_predetermined_variable(const string &name) +ParsingDriver::predetermined_variables(const vector<string> &symbol_list) { - check_symbol_is_endogenous(name); - int symb_id = mod_file->symbol_table.getID(name); - mod_file->symbol_table.markPredetermined(symb_id); + for (auto &name : symbol_list) + { + check_symbol_is_endogenous(name); + int symb_id = mod_file->symbol_table.getID(name); + mod_file->symbol_table.markPredetermined(symb_id); + } } void @@ -449,17 +472,17 @@ ParsingDriver::add_expression_variable(const string &name) } void -ParsingDriver::declare_nonstationary_var(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value) +ParsingDriver::end_nonstationary_var(bool log_deflator, expr_t deflator, const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list) { - declare_endogenous(name, tex_name, partition_value); - - declared_nonstationary_vars.push_back(mod_file->symbol_table.getID(name)); mod_file->nonstationary_variables = true; -} -void -ParsingDriver::end_nonstationary_var(bool log_deflator, expr_t deflator) -{ + vector<int> declared_nonstationary_vars; + for (auto &[name, tex_name, partition] : symbol_list) + { + declare_endogenous(name, tex_name, partition); + declared_nonstationary_vars.push_back(mod_file->symbol_table.getID(name)); + } + try { dynamic_model->addNonstationaryVariables(declared_nonstationary_vars, log_deflator, deflator); @@ -608,10 +631,10 @@ ParsingDriver::add_generate_irfs_exog_element(string exo, const string &value) } void -ParsingDriver::forecast() +ParsingDriver::forecast(vector<string> symbol_list) { - mod_file->addStatement(make_unique<ForecastStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<ForecastStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } @@ -646,13 +669,12 @@ ParsingDriver::differentiate_forward_vars_all() } void -ParsingDriver::differentiate_forward_vars_some() +ParsingDriver::differentiate_forward_vars_some(vector<string> symbol_list) { mod_file->differentiate_forward_vars = true; - mod_file->differentiate_forward_vars_subset = symbol_list.get_symbols(); + mod_file->differentiate_forward_vars_subset = move(symbol_list); for (auto &it : mod_file->differentiate_forward_vars_subset) check_symbol_is_endogenous(it); - symbol_list.clear(); } void @@ -989,7 +1011,6 @@ ParsingDriver::end_svar_identification() svar_lower_cholesky, svar_constants_exclusion, mod_file->symbol_table)); - svar_restriction_symbols.clear(); svar_equation_restrictions.clear(); svar_ident_restrictions.clear(); svar_Qi_restriction_nbr.clear(); @@ -1026,7 +1047,7 @@ ParsingDriver::combine_lag_and_restriction(const string &lag) } void -ParsingDriver::add_restriction_in_equation(const string &equation) +ParsingDriver::add_restriction_in_equation(const string &equation, const vector<string> &symbol_list) { int eqn = stoi(equation); if (eqn < 1) @@ -1035,22 +1056,19 @@ ParsingDriver::add_restriction_in_equation(const string &equation) if (svar_equation_restrictions.count(eqn) > 0) error("equation number " + equation + " referenced more than once under a single lag."); - svar_equation_restrictions[eqn] = svar_restriction_symbols; - - svar_restriction_symbols.clear(); -} - -void -ParsingDriver::add_in_svar_restriction_symbols(const string &tmp_var) -{ - check_symbol_existence(tmp_var); - int symb_id = mod_file->symbol_table.getID(tmp_var); + vector<int> svar_restriction_symbols; + for (auto &name : symbol_list) + { + check_symbol_existence(name); + int symb_id = mod_file->symbol_table.getID(name); - for (const auto &viit : svar_restriction_symbols) - if (symb_id == viit) - error(tmp_var + " restriction added twice."); + for (const auto &viit : svar_restriction_symbols) + if (symb_id == viit) + error(name + " restriction added twice."); - svar_restriction_symbols.push_back(symb_id); + svar_restriction_symbols.push_back(symb_id); + } + svar_equation_restrictions[eqn] = svar_restriction_symbols; } void @@ -1274,7 +1292,7 @@ ParsingDriver::option_date(string name_option, string opt) } void -ParsingDriver::option_symbol_list(string name_option) +ParsingDriver::option_symbol_list(string name_option, vector<string> symbol_list) { if (options_list.symbol_list_options.find(name_option) != options_list.symbol_list_options.end()) @@ -1282,8 +1300,7 @@ ParsingDriver::option_symbol_list(string name_option) if (name_option.compare("irf_shocks") == 0) { - vector<string> shocks = symbol_list.get_symbols(); - for (auto &shock : shocks) + for (auto &shock : symbol_list) { if (!mod_file->symbol_table.exists(shock)) error("Unknown symbol: " + shock); @@ -1294,14 +1311,12 @@ ParsingDriver::option_symbol_list(string name_option) if (name_option.compare("ms.parameters") == 0) { - vector<string> parameters = symbol_list.get_symbols(); - for (auto &it : parameters) + for (auto &it : symbol_list) if (mod_file->symbol_table.getType(it) != SymbolType::parameter) error("Variables passed to the parameters option of the markov_switching statement must be parameters. Caused by: " + it); } - options_list.symbol_list_options[move(name_option)] = symbol_list; - symbol_list.clear(); + options_list.symbol_list_options[move(name_option)] = move(symbol_list); } void @@ -1350,27 +1365,22 @@ ParsingDriver::linear() } void -ParsingDriver::add_in_symbol_list(const string &tmp_var) +ParsingDriver::rplot(vector<string> symbol_list) { - symbol_list.addSymbol(tmp_var); + mod_file->addStatement(make_unique<RplotStatement>(move(symbol_list), mod_file->symbol_table)); } void -ParsingDriver::rplot() -{ - mod_file->addStatement(make_unique<RplotStatement>(symbol_list)); - symbol_list.clear(); -} - -void -ParsingDriver::stoch_simul() +ParsingDriver::stoch_simul(SymbolList symbol_list) { //make sure default order is known to preprocessor, see #49 if (options_list.num_options.find("order") == options_list.num_options.end()) options_list.num_options["order"] = "2"; - mod_file->addStatement(make_unique<StochSimulStatement>(symbol_list, options_list)); - symbol_list.clear(); + symbol_list.removeDuplicates("stoch_simul", warnings); + + mod_file->addStatement(make_unique<StochSimulStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } @@ -1519,7 +1529,6 @@ ParsingDriver::set_unit_root_vars() { mod_file->addStatement(make_unique<UnitRootVarsStatement>()); warning("''unit_root_vars'' is now obsolete; use the ''diffuse_filter'' option of ''estimation'' instead"); - symbol_list.clear(); } void @@ -1817,10 +1826,9 @@ ParsingDriver::set_corr_options(const string &name1, const string &name2, const } void -ParsingDriver::run_estimation() +ParsingDriver::run_estimation(vector<string> symbol_list) { - mod_file->addStatement(make_unique<EstimationStatement>(mod_file->symbol_table, symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<EstimationStatement>(mod_file->symbol_table, move(symbol_list), options_list)); options_list.clear(); } @@ -1951,32 +1959,31 @@ ParsingDriver::optim_weights() } void -ParsingDriver::set_osr_params() +ParsingDriver::set_osr_params(vector<string> symbol_list) { - mod_file->addStatement(make_unique<OsrParamsStatement>(symbol_list, mod_file->symbol_table)); - symbol_list.clear(); + mod_file->addStatement(make_unique<OsrParamsStatement>(move(symbol_list), mod_file->symbol_table)); } void -ParsingDriver::run_osr() +ParsingDriver::run_osr(vector<string> symbol_list) { - mod_file->addStatement(make_unique<OsrStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<OsrStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } void -ParsingDriver::run_dynatype(const string &filename) +ParsingDriver::run_dynatype(const string &filename, vector<string> symbol_list) { - mod_file->addStatement(make_unique<DynaTypeStatement>(symbol_list, filename)); - symbol_list.clear(); + mod_file->addStatement(make_unique<DynaTypeStatement>(move(symbol_list), filename, + mod_file->symbol_table)); } void -ParsingDriver::run_dynasave(const string &filename) +ParsingDriver::run_dynasave(const string &filename, vector<string> symbol_list) { - mod_file->addStatement(make_unique<DynaSaveStatement>(symbol_list, filename)); - symbol_list.clear(); + mod_file->addStatement(make_unique<DynaSaveStatement>(move(symbol_list), filename, + mod_file->symbol_table)); } void @@ -2084,7 +2091,7 @@ ParsingDriver::ramsey_model() } void -ParsingDriver::ramsey_policy() +ParsingDriver::ramsey_policy(vector<string> symbol_list) { warning("The 'ramsey_policy' statement is deprecated. Please use 'ramsey_model', 'stoch_simul', and 'evaluate_planner_objective' instead."); @@ -2111,9 +2118,9 @@ ParsingDriver::ramsey_policy() for (const auto &s : it->second.getSymbols()) check_symbol_is_endogenous(s); - mod_file->addStatement(make_unique<RamseyPolicyStatement>(symbol_list, options_list)); + mod_file->addStatement(make_unique<RamseyPolicyStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); - symbol_list.clear(); planner_discount = nullptr; } @@ -2146,15 +2153,14 @@ ParsingDriver::occbin_write_regimes() } void -ParsingDriver::occbin_graph() +ParsingDriver::occbin_graph(vector<string> symbol_list) { - mod_file->addStatement(make_unique<OccbinGraphStatement>(symbol_list, options_list)); + mod_file->addStatement(make_unique<OccbinGraphStatement>(move(symbol_list), options_list)); options_list.clear(); - symbol_list.clear(); } void -ParsingDriver::discretionary_policy() +ParsingDriver::discretionary_policy(vector<string> symbol_list) { /* The logic here is different from “ramsey_policy” and “ramsey_model”, because we want to allow several instances of “discretionary_policy” in @@ -2172,8 +2178,8 @@ ParsingDriver::discretionary_policy() for (const auto &s : it->second.getSymbols()) check_symbol_is_endogenous(s); - mod_file->addStatement(make_unique<DiscretionaryPolicyStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<DiscretionaryPolicyStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); planner_discount = nullptr; } @@ -2252,10 +2258,10 @@ ParsingDriver::ms_compute_probabilities() } void -ParsingDriver::ms_irf() +ParsingDriver::ms_irf(vector<string> symbol_list) { - mod_file->addStatement(make_unique<MSSBVARIrfStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<MSSBVARIrfStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } @@ -2332,42 +2338,44 @@ ParsingDriver::markov_switching() } void -ParsingDriver::shock_decomposition() +ParsingDriver::shock_decomposition(vector<string> symbol_list) { - mod_file->addStatement(make_unique<ShockDecompositionStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<ShockDecompositionStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } void -ParsingDriver::realtime_shock_decomposition() +ParsingDriver::realtime_shock_decomposition(vector<string> symbol_list) { - mod_file->addStatement(make_unique<RealtimeShockDecompositionStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<RealtimeShockDecompositionStatement>(move(symbol_list), + options_list, + mod_file->symbol_table)); options_list.clear(); } void -ParsingDriver::plot_shock_decomposition() +ParsingDriver::plot_shock_decomposition(vector<string> symbol_list) { - mod_file->addStatement(make_unique<PlotShockDecompositionStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<PlotShockDecompositionStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } void -ParsingDriver::initial_condition_decomposition() +ParsingDriver::initial_condition_decomposition(vector<string> symbol_list) { - mod_file->addStatement(make_unique<InitialConditionDecompositionStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<InitialConditionDecompositionStatement>(move(symbol_list), + options_list, + mod_file->symbol_table)); options_list.clear(); } void -ParsingDriver::squeeze_shock_decomposition() +ParsingDriver::squeeze_shock_decomposition(vector<string> symbol_list) { - mod_file->addStatement(make_unique<SqueezeShockDecompositionStatement>(symbol_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<SqueezeShockDecompositionStatement>(move(symbol_list), + mod_file->symbol_table)); } void @@ -2378,11 +2386,11 @@ ParsingDriver::conditional_forecast() } void -ParsingDriver::plot_conditional_forecast(const string &periods) +ParsingDriver::plot_conditional_forecast(const string &periods, vector<string> symbol_list) { int nperiods = periods.empty() ? -1 : stoi(periods); - mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(nperiods, symbol_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(nperiods, move(symbol_list), + mod_file->symbol_table)); } void @@ -2393,10 +2401,10 @@ ParsingDriver::conditional_forecast_paths() } void -ParsingDriver::calib_smoother() +ParsingDriver::calib_smoother(vector<string> symbol_list) { - mod_file->addStatement(make_unique<CalibSmootherStatement>(symbol_list, options_list)); - symbol_list.clear(); + mod_file->addStatement(make_unique<CalibSmootherStatement>(move(symbol_list), options_list, + mod_file->symbol_table)); options_list.clear(); } @@ -2465,9 +2473,10 @@ ParsingDriver::add_model_equal_with_zero_rhs(expr_t arg) } void -ParsingDriver::declare_model_local_variable(const string &name, const string &tex_name) +ParsingDriver::model_local_variable(const vector<pair<string, string>> &symbol_list) { - declare_symbol(name, SymbolType::modelLocalVariable, tex_name, {}); + for (auto &[name, tex_name] : symbol_list) + declare_symbol(name, SymbolType::modelLocalVariable, tex_name, {}); } void @@ -2499,9 +2508,9 @@ ParsingDriver::declare_and_init_model_local_variable(const string &name, expr_t } void -ParsingDriver::change_type(SymbolType new_type, const vector<string> &var_list) +ParsingDriver::change_type(SymbolType new_type, const vector<string> &symbol_list) { - for (auto &it : var_list) + for (auto &it : symbol_list) { int id; try @@ -3147,12 +3156,11 @@ ParsingDriver::add_steady_state_model_equal(const string &varname, expr_t expr) } void -ParsingDriver::add_steady_state_model_equal_multiple(expr_t expr) +ParsingDriver::add_steady_state_model_equal_multiple(const vector<string> &symbol_list, expr_t expr) { - const vector<string> &symbs = symbol_list.get_symbols(); vector<int> ids; - for (const auto &symb : symbs) + for (const auto &symb : symbol_list) { int id; try @@ -3171,14 +3179,12 @@ ParsingDriver::add_steady_state_model_equal_multiple(expr_t expr) } mod_file->steady_state_model.addMultipleDefinitions(ids, expr); - - symbol_list.clear(); } void -ParsingDriver::add_graph_format(const string &name) +ParsingDriver::add_graph_format(string name) { - graph_formats.addSymbol(name); + graph_formats.emplace_back(move(name)); } void @@ -3640,15 +3646,14 @@ ParsingDriver::begin_model_replace(const vector<pair<string, string>> &listed_eq } void -ParsingDriver::var_remove() +ParsingDriver::var_remove(const vector<string> &symbol_list) { - for (const auto &name : symbol_list.getSymbols()) + for (const auto &name : symbol_list) { check_symbol_existence(name); int symb_id = mod_file->symbol_table.getID(name); mod_file->symbol_table.changeType(symb_id, SymbolType::excludedVariable); } - symbol_list.clear(); } void diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh index f43d8fcc91e7bb61b25e274b575c8304aee2205f..b3fc892d05d96ffa3cbb144c0b5c4da870c96524 100644 --- a/src/ParsingDriver.hh +++ b/src/ParsingDriver.hh @@ -111,9 +111,6 @@ private: //! Helper to add a symbol declaration void declare_symbol(const string &name, SymbolType type, const string &tex_name, const vector<pair<string, string>> &partition_value); - //! Stores temporary symbol table - SymbolList symbol_list; - //! Temporary store for the planner objective unique_ptr<StaticModel> planner_objective; @@ -185,8 +182,6 @@ private: SvarIdentificationStatement::svar_identification_restrictions_t svar_ident_restrictions; //! Temporary storage for mapping the equation number to the restrictions within an svar_identification block map<int, vector<int>> svar_equation_restrictions; - //! Temporary storage for restrictions in an equation within an svar_identification block - vector<int> svar_restriction_symbols; //! Temporary storage for constants exculsion within an svar_identification bool svar_constants_exclusion; //! Temporary storage for upper cholesky within an svar_identification block @@ -222,10 +217,6 @@ private: int current_external_function_id; //! Temporary storage for option list provided to external_function() ExternalFunctionsTable::external_function_options current_external_function_options; - //! Temporary storage for declaring trend variables - vector<int> declared_trend_vars; - //! Temporary storage for declaring nonstationary variables - vector<int> declared_nonstationary_vars; //! Temporary storage for a variance declared in the prior statement expr_t prior_variance; SubsamplesStatement::subsample_declaration_map_t subsample_declaration_map; @@ -246,7 +237,7 @@ private: //! Adds a model lagged variable to ModelTree and VariableTable expr_t add_model_variable(int symb_id, int lag); //! For parsing the graph_format option - SymbolList graph_formats; + vector<string> graph_formats; //! Temporary storage for equation tags map<string, string> eq_tags; // Temporary storages for pac_target_info @@ -342,7 +333,7 @@ public: //! the differentiate_forward_vars option is enabled (for all vars) void differentiate_forward_vars_all(); //! the differentiate_forward_vars option is enabled (for a subset of vars) - void differentiate_forward_vars_some(); + void differentiate_forward_vars_some(vector<string> symbol_list); //! cutoff option of model block void cutoff(const string &value); //! mfs option of model block @@ -363,14 +354,20 @@ public: void initval_file(); //! Declares an endogenous variable void declare_endogenous(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); + // Handles a “var” statement (without “deflator” or “log_deflator” options) + void var(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list); //! Declares an exogenous variable void declare_exogenous(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); - //! Declares an exogenous deterministic variable - void declare_exogenous_det(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); + // Handles a “varexo” statement + void varexo(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list); + // Handles a “varexo_det” statement + void varexo_det(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list); //! Declares a parameter void declare_parameter(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); - //! Declares a model local variable - void declare_model_local_variable(const string &name, const string &tex_name = ""); + // Handles a “parameters” statement + void parameters(const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list); + // Handles a “model_local_variable” statement + void model_local_variable(const vector<pair<string, string>> &symbol_list); //! Declares a statement local variable void declare_statement_local_variable(const string &name); //! Completes a subsample statement @@ -386,12 +383,12 @@ public: void set_planner_discount(expr_t value); //! Sets the value of the planner_discount_latex_name option of ramsey_model void set_planner_discount_latex_name(string tex_name); - //! Adds a predetermined_variable - void add_predetermined_variable(const string &name); + //! Handles a “predetermined_variables” statement + void predetermined_variables(const vector<string> &symbol_list); //! Declares and initializes a local parameter void declare_and_init_model_local_variable(const string &name, expr_t rhs); //! Changes type of a symbol - void change_type(SymbolType new_type, const vector<string> &var_list); + void change_type(SymbolType new_type, const vector<string> &symbol_list); //! Adds a list of tags for the current equation void add_equation_tags(string key, string value); //! Adds a non-negative constant to DataTree @@ -490,8 +487,8 @@ public: void option_str(string name_option, string opt); //! Sets an option to a date value void option_date(string name_option, string opt); - //! Sets an option to a list of symbols (used in conjunction with add_in_symbol_list()) - void option_symbol_list(string name_option); + //! Sets an option to a list of symbols + void option_symbol_list(string name_option, vector<string> symbol_list); //! Sets an option to a vector of integers void option_vec_int(string name_option, vector<int> opt); //! Sets an option to a vector of strings @@ -500,12 +497,10 @@ public: void option_vec_cellstr(string name_option, vector<string> opt); //! Indicates that the model is linear void linear(); - //! Adds a variable to temporary symbol list - void add_in_symbol_list(const string &tmp_var); //! Writes a rplot() command - void rplot(); + void rplot(vector<string> symbol_list); //! Writes a stock_simul command - void stoch_simul(); + void stoch_simul(SymbolList symbol_list); //! Writes a trend component command void trend_component_model(); //! Writes a var (vector autoregression) command @@ -563,7 +558,7 @@ public: //! Sets the options for estimated correlation void set_corr_options(const string &name1, const string &name2, const string &subsample_name); //! Runs estimation process - void run_estimation(); + void run_estimation(vector<string> symbol_list); //! Runs dynare_sensitivy() void dynare_sensitivity(); //! Check that no observed variable has yet be defined @@ -580,9 +575,7 @@ public: //! Svar_Identification Statement: match list of restrictions and equation number with lag void combine_lag_and_restriction(const string &lag); //! Svar_Identification Statement: match list of restrictions with equation number - void add_restriction_in_equation(const string &equation); - //! Svar_Identification Statement: add list of restriction symbol ids - void add_in_svar_restriction_symbols(const string &tmp_var); + void add_restriction_in_equation(const string &equation, const vector<string> &symbol_list); //! Svar_Identification Statement: add exclusions of constants void add_constants_exclusion(); //! Svar_Identification Statement: add equation number for following restriction equations @@ -612,7 +605,7 @@ public: void add_generate_irfs_element(string name); void add_generate_irfs_exog_element(string exo, const string &value); //! Forecast Statement - void forecast(); + void forecast(vector<string> symbol_list); void set_trends(); void set_deterministic_trends(); void set_trend_element(string arg1, expr_t arg2); @@ -624,10 +617,10 @@ public: void optim_weights(); void set_optim_weights(string name, expr_t value); void set_optim_weights(const string &name1, const string &name2, expr_t value); - void set_osr_params(); - void run_osr(); - void run_dynasave(const string &filename); - void run_dynatype(const string &filename); + void set_osr_params(vector<string> symbol_list); + void run_osr(vector<string> symbol_list); + void run_dynasave(const string &filename, vector<string> symbol_list); + void run_dynatype(const string &filename, vector<string> symbol_list); void run_load_params_and_steady_state(const string &filename); void run_save_params_and_steady_state(const string &filename); void run_identification(); @@ -652,7 +645,7 @@ public: //! Ramsey constraint helper function void add_ramsey_constraint(const string &name, BinaryOpcode op_code, const expr_t rhs); //! Ramsey policy statement - void ramsey_policy(); + void ramsey_policy(vector<string> symbol_list); //! Evaluate Planner Objective void evaluate_planner_objective(); //! Set up Occbin @@ -662,9 +655,9 @@ public: //! Run Occbin write XLS void occbin_write_regimes(); //! Run plotting of Occbin results - void occbin_graph(); + void occbin_graph(vector<string> symbol_list); //! Discretionary policy statement - void discretionary_policy(); + void discretionary_policy(vector<string> symbol_list); //! Adds a write_latex_dynamic_model statement void write_latex_dynamic_model(bool write_equation_tags); //! Adds a write_latex_static_model statement @@ -688,7 +681,7 @@ public: //! Markov Switching Statement: Probabilities void ms_compute_probabilities(); //! Markov Switching Statement: IRF - void ms_irf(); + void ms_irf(vector<string> symbol_list); //! Markov Switching Statement: Forecast void ms_forecast(); //! Markov Switching Statement: Variance Decomposition @@ -698,23 +691,23 @@ public: //! MarkovSwitching statement void markov_switching(); //! Shock decomposition - void shock_decomposition(); + void shock_decomposition(vector<string> symbol_list); //! Realtime Shock decomposition - void realtime_shock_decomposition(); + void realtime_shock_decomposition(vector<string> symbol_list); //! Plot Shock decomposition - void plot_shock_decomposition(); + void plot_shock_decomposition(vector<string> symbol_list); //! Initial Condition decomposition - void initial_condition_decomposition(); + void initial_condition_decomposition(vector<string> symbol_list); //! squeeze_shock_decomposition statement - void squeeze_shock_decomposition(); + void squeeze_shock_decomposition(vector<string> symbol_list); //! Conditional forecast statement void conditional_forecast(); //! Conditional forecast paths block void conditional_forecast_paths(); //! Plot conditional forecast statement - void plot_conditional_forecast(const string &periods = ""); + void plot_conditional_forecast(const string &periods, vector<string> symbol_list); //! Smoother on calibrated models - void calib_smoother(); + void calib_smoother(vector<string> symbol_list); //! Extended path void extended_path(); //! Writes token "arg1=arg2" to model tree @@ -847,19 +840,15 @@ public: //! Add an assignment equation in steady_state_model block void add_steady_state_model_equal(const string &varname, expr_t expr); //! Add a multiple assignment equation in steady_state_model block - void add_steady_state_model_equal_multiple(expr_t expr); + void add_steady_state_model_equal_multiple(const vector<string> &symbol_list, expr_t expr); //! Switches datatree void begin_trend(); - //! Declares a trend variable with its growth factor - void declare_trend_var(bool log_trend, const string &name, const string &tex_name = ""); //! Ends declaration of trend variable - void end_trend_var(expr_t growth_factor); - //! Declares a nonstationary variable with its deflator - void declare_nonstationary_var(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); + void end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list); //! Ends declaration of nonstationary variable - void end_nonstationary_var(bool log_deflator, expr_t deflator); + void end_nonstationary_var(bool log_deflator, expr_t deflator, const vector<tuple<string, string, vector<pair<string, string>>>> &symbol_list); //! Add a graph format to the list of formats requested - void add_graph_format(const string &name); + void add_graph_format(string name); //! Add the graph_format option to the OptionsList structure void process_graph_format_option(); //! Add the graph_format option to the initial_condition_decomp substructure of the OptionsList structure @@ -912,7 +901,7 @@ public: // Begin a model_replace statement void begin_model_replace(const vector<pair<string, string>> &listed_eqs_by_tags); // Add a var_remove statement - void var_remove(); + void var_remove(const vector<string> &symbol_list); void begin_pac_target_info(string name); void end_pac_target_info(); void set_pac_target_info_target(expr_t target); diff --git a/src/SymbolList.cc b/src/SymbolList.cc index 794095ff04c013c062e84caec81f3bec2a74a0dc..83517a6564b2de2f107ce6e1e88ce91d249a7720 100644 --- a/src/SymbolList.cc +++ b/src/SymbolList.cc @@ -1,5 +1,5 @@ /* - * Copyright © 2003-2021 Dynare Team + * Copyright © 2003-2022 Dynare Team * * This file is part of Dynare. * @@ -21,21 +21,14 @@ #include "SymbolList.hh" -void -SymbolList::setSymbolTable(const SymbolTable &symbol_table_arg) -{ - symbol_table = &symbol_table_arg; -} - -void -SymbolList::addSymbol(const string &symbol) +SymbolList::SymbolList(vector<string> symbols_arg) : + symbols{move(symbols_arg)} { - symbols.push_back(symbol); } void -SymbolList::checkPass(WarningConsolidation &warnings, - const vector<SymbolType> &types) const noexcept(false) +SymbolList::checkPass(WarningConsolidation &warnings, const vector<SymbolType> &types, + const SymbolTable &symbol_table) const noexcept(false) { if (types.empty()) return; @@ -51,7 +44,7 @@ SymbolList::checkPass(WarningConsolidation &warnings, regex re("^(" + regex_str +")"); for (const auto &symbol : symbols) { - if (!symbol_table->exists(symbol)) + if (!symbol_table.exists(symbol)) { if (regex_search(symbol, m, re)) { @@ -66,7 +59,7 @@ SymbolList::checkPass(WarningConsolidation &warnings, bool type_found = false; for (auto type : types) - if (symbol_table->getType(symbol) == type) + if (symbol_table.getType(symbol) == type) { type_found = true; break; @@ -148,18 +141,6 @@ SymbolList::writeJsonOutput(ostream &output) const output << "]"; } -void -SymbolList::clear() -{ - symbols.clear(); -} - -int -SymbolList::getSize() const -{ - return symbols.size(); -} - vector<string> SymbolList::getSymbols() const { diff --git a/src/SymbolList.hh b/src/SymbolList.hh index d009d9e50911dba9f63578a3be3af8f18d7b874b..14bc13f8ad4ffade43037c987f7a87898936a959 100644 --- a/src/SymbolList.hh +++ b/src/SymbolList.hh @@ -1,5 +1,5 @@ /* - * Copyright © 2003-2019 Dynare Team + * Copyright © 2003-2022 Dynare Team * * This file is part of Dynare. * @@ -35,10 +35,12 @@ using namespace std; class SymbolList { private: - //! Internal container for symbol list vector<string> symbols; - const SymbolTable *symbol_table; public: + SymbolList() = default; + // This constructor is deliberately not marked explicit, to allow implicit conversion + SymbolList(vector<string> symbols_arg); + class SymbolListException { public: @@ -47,14 +49,10 @@ public: { }; }; - //! Set symbol table pointer - void setSymbolTable(const SymbolTable &symbol_table_arg); - //! Adds a symbol to the list - void addSymbol(const string &symbol); - //! Removed duplicate symbols + //! Remove duplicate symbols void removeDuplicates(const string &dynare_command, WarningConsolidation &warnings); //! Check symbols to ensure variables have been declared and are endogenous - void checkPass(WarningConsolidation &warnings, const vector<SymbolType> &types) const noexcept(false); + void checkPass(WarningConsolidation &warnings, const vector<SymbolType> &types, const SymbolTable &symbol_table) const noexcept(false); //! Output content in Matlab format /*! Creates a string array for Matlab, stored in variable "varname" */ void writeOutput(const string &varname, ostream &output) const; @@ -62,22 +60,12 @@ public: void write(ostream &output) const; //! Write JSON output void writeJsonOutput(ostream &output) const; - //! Clears all content - void clear(); - //! Get a copy of the string vector - vector<string> - get_symbols() const - { - return symbols; - }; //! Is Empty int empty() const { return symbols.empty(); }; - //! Return the number of Symbols contained in the list - int getSize() const; //! Return the list of symbols vector<string> getSymbols() const; };