Refactor parsing of symbol lists

For symbol lists (such as those given to “var” or “stoch_simul”), return a
semantic value at the Bison level, rather than building the list through a
temporary object in ParsingDriver. This allows various simplifications, and
leads to a more functional code.

By the way, homogeneize the naming of the various flavours of symbol lists in
the Bison file (with TeX names, partitioning, or with a wildcard).
fix-tolerance-parameters
Sébastien Villemot 2022-03-28 18:11:53 +02:00
parent 7fff8b3406
commit 46cc47266b
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
8 changed files with 556 additions and 654 deletions

View File

@ -333,10 +333,11 @@ PriorPosteriorFunctionStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg, StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg) : const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_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); exit(EXIT_FAILURE);
} }
symbol_list.removeDuplicates("stoch_simul", warnings);
try try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -418,10 +417,11 @@ StochSimulStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
ForecastStatement::ForecastStatement(SymbolList symbol_list_arg, ForecastStatement::ForecastStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg) : const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -620,9 +620,11 @@ RamseyConstraintsStatement::writeJsonOutput(ostream &output) const
} }
RamseyPolicyStatement::RamseyPolicyStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -733,9 +735,11 @@ EvaluatePlannerObjectiveStatement::writeJsonOutput(ostream &output) const
} }
DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -1042,7 +1046,7 @@ EstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli
try try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -1145,8 +1149,10 @@ DynareSensitivityStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
RplotStatement::RplotStatement(SymbolList symbol_list_arg) : RplotStatement::RplotStatement(SymbolList symbol_list_arg,
symbol_list{move(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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous}); symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous}, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -2024,7 +2030,7 @@ OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolid
try try
{ {
symbol_list.checkPass(warnings, { SymbolType::parameter }); symbol_list.checkPass(warnings, { SymbolType::parameter }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) 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 output << "M_.osr.param_names = cellstr(M_.osr.param_names);" << endl
<< "M_.osr.param_indices = zeros(length(M_.osr.param_names), 1);" << endl; << "M_.osr.param_indices = zeros(length(M_.osr.param_names), 1);" << endl;
int i = 0; int i = 0;
vector<string> symbols = symbol_list.get_symbols(); vector<string> symbols = symbol_list.getSymbols();
for (auto &symbol : symbols) for (auto &symbol : symbols)
output << "M_.osr.param_indices(" << ++i <<") = " << symbol_table.getTypeSpecificID(symbol) + 1 << ";" << endl; 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, OsrStatement::OsrStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg) : const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -2253,10 +2260,11 @@ OptimWeightsStatement::writeJsonOutput(ostream &output) const
<< "}"; << "}";
} }
DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg, DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg, string filename_arg,
string filename_arg) : const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -2295,10 +2303,11 @@ DynaSaveStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg, DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg, string filename_arg,
string filename_arg) : const SymbolTable &symbol_table_arg) :
symbol_list(move(symbol_list_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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -2687,10 +2696,11 @@ MSSBVARComputeProbabilitiesStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg, MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg) : const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -2976,9 +2986,11 @@ WriteLatexSteadyStateModelStatement::writeJsonOutput(ostream &output) const
} }
ShockDecompositionStatement::ShockDecompositionStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -3026,9 +3038,11 @@ ShockDecompositionStatement::writeJsonOutput(ostream &output) const
} }
RealtimeShockDecompositionStatement::RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -3076,9 +3090,11 @@ RealtimeShockDecompositionStatement::writeJsonOutput(ostream &output) const
} }
PlotShockDecompositionStatement::PlotShockDecompositionStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue }); symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -3123,9 +3139,11 @@ PlotShockDecompositionStatement::writeJsonOutput(ostream &output) const
} }
InitialConditionDecompositionStatement::InitialConditionDecompositionStatement(SymbolList symbol_list_arg, 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)}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -3173,8 +3191,10 @@ InitialConditionDecompositionStatement::writeJsonOutput(ostream &output) const
output << "}"; output << "}";
} }
SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg) SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg,
: symbol_list{move(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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -3251,9 +3271,12 @@ ConditionalForecastStatement::writeJsonOutput(ostream &output) const
output << "}"; 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}, 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 try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {
@ -4826,8 +4849,11 @@ OptionsEqualStatement::writeOutput(ostream &output, const string &basename, bool
} }
CalibSmootherStatement::CalibSmootherStatement(SymbolList symbol_list_arg, CalibSmootherStatement::CalibSmootherStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) OptionsList options_list_arg,
: symbol_list{move(symbol_list_arg)}, options_list{move(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; mod_file_struct.calib_smoother_present = true;
try try
{ {
symbol_list.checkPass(warnings, { SymbolType::endogenous }); symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
} }
catch (SymbolList::SymbolListException &e) catch (SymbolList::SymbolListException &e)
{ {

View File

@ -130,11 +130,12 @@ public:
class StochSimulStatement : public Statement class StochSimulStatement : public Statement
{ {
private: private:
SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
StochSimulStatement(SymbolList symbol_list_arg, StochSimulStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -145,9 +146,10 @@ class ForecastStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
ForecastStatement(SymbolList symbol_list_arg, ForecastStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -189,9 +191,10 @@ class RamseyPolicyStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
RamseyPolicyStatement(SymbolList symbol_list_arg, RamseyPolicyStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -254,9 +257,10 @@ class DiscretionaryPolicyStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
DiscretionaryPolicyStatement(SymbolList symbol_list_arg, DiscretionaryPolicyStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -266,8 +270,9 @@ class RplotStatement : public Statement
{ {
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const SymbolTable &symbol_table;
public: 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 checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -386,9 +391,10 @@ class OsrStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
OsrStatement(SymbolList symbol_list_arg, OsrStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -426,9 +432,10 @@ class DynaTypeStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const string filename; const string filename;
const SymbolTable &symbol_table;
public: public:
DynaTypeStatement(SymbolList symbol_list_arg, DynaTypeStatement(SymbolList symbol_list_arg, string filename_arg,
string filename_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -439,9 +446,10 @@ class DynaSaveStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const string filename; const string filename;
const SymbolTable &symbol_table;
public: public:
DynaSaveStatement(SymbolList symbol_list_arg, DynaSaveStatement(SymbolList symbol_list_arg, string filename_arg,
string filename_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -671,9 +679,10 @@ class MSSBVARIrfStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
MSSBVARIrfStatement(SymbolList symbol_list_arg, MSSBVARIrfStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -761,9 +770,10 @@ class ShockDecompositionStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
ShockDecompositionStatement(SymbolList symbol_list_arg, ShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -774,9 +784,10 @@ class RealtimeShockDecompositionStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -787,9 +798,10 @@ class PlotShockDecompositionStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
PlotShockDecompositionStatement(SymbolList symbol_list_arg, PlotShockDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -800,9 +812,10 @@ class InitialConditionDecompositionStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
InitialConditionDecompositionStatement(SymbolList symbol_list_arg, InitialConditionDecompositionStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -812,8 +825,10 @@ class SqueezeShockDecompositionStatement : public Statement
{ {
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const SymbolTable &symbol_table;
public: 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 checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) 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 //! A value of -1 indicates that the user didn't specify a value
const int periods; const int periods;
const SymbolList symbol_list; const SymbolList symbol_list;
const SymbolTable &symbol_table;
public: 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 checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;
@ -848,9 +865,10 @@ class CalibSmootherStatement : public Statement
private: private:
const SymbolList symbol_list; const SymbolList symbol_list;
const OptionsList options_list; const OptionsList options_list;
const SymbolTable &symbol_table;
public: public:
CalibSmootherStatement(SymbolList symbol_list_arg, CalibSmootherStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
OptionsList options_list_arg); const SymbolTable &symbol_table_arg);
void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override;
void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override;
void writeJsonOutput(ostream &output) const override; void writeJsonOutput(ostream &output) const override;

View File

@ -203,12 +203,12 @@ class ParsingDriver;
%type <string> name_value_pair_with_suboptions name_value_pair_with_suboptions_list %type <string> name_value_pair_with_suboptions name_value_pair_with_suboptions_list
%type <SymbolType> change_type_arg %type <SymbolType> change_type_arg
%type <vector<string>> vec_str vec_str_1 %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 <vector<int>> vec_int_elem vec_int_1 vec_int vec_int_number
%type <PriorDistributions> prior_pdf prior_distribution %type <PriorDistributions> prior_pdf prior_distribution
%type <pair<expr_t,expr_t>> calibration_range %type <pair<expr_t,expr_t>> calibration_range
%type <pair<string,string>> named_var_elem subsamples_eq_opt integer_range_w_inf %type <pair<string,string>> partition_elem subsamples_eq_opt integer_range_w_inf
%type <vector<pair<string,string>>> named_var named_var_1 tag_pair_list_for_selection %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 <tuple<string,string,string,string>> prior_eq_opt options_eq_opt
%type <vector<pair<int, int>>> period_list %type <vector<pair<int, int>>> period_list
%type <vector<expr_t>> matched_moments_list value_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 <map<string, expr_t>> occbin_constraints_regime_options_list
%type <pair<string, expr_t>> occbin_constraints_regime_option %type <pair<string, expr_t>> occbin_constraints_regime_option
%type <PacTargetKind> pac_target_kind %type <PacTargetKind> pac_target_kind
%type <vector<tuple<string, string, vector<pair<string, string>>>>> symbol_list_with_tex_and_partition
%% %%
%start statement_list; %start statement_list;
@ -361,52 +362,143 @@ dsample : DSAMPLE INT_NUMBER ';'
{ driver.dsample($2, $3); } { 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 }; }
;
trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' trend_var_list ';' symbol_list_or_wildcard : symbol_list
{ driver.end_trend_var($6); } | ':'
{ $$ = { ":" }; }
;
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 } }; }
;
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 symbol_list_with_tex_and_partition : symbol_list_with_tex_and_partition symbol
{ driver.declare_trend_var(false, $2); } {
| trend_var_list COMMA symbol $$ = $1;
{ driver.declare_trend_var(false, $3); } $$.emplace_back($2, "", vector<pair<string,string>>{});
| symbol }
{ driver.declare_trend_var(false, $1); } | symbol_list_with_tex_and_partition COMMA symbol
| trend_var_list symbol TEX_NAME {
{ driver.declare_trend_var(false, $2, $3); } $$ = $1;
| trend_var_list COMMA symbol TEX_NAME $$.emplace_back($3, "", vector<pair<string,string>>{});
{ driver.declare_trend_var(false, $3, $4); } }
| symbol TEX_NAME | symbol
{ driver.declare_trend_var(false, $1, $2); } { $$ = { { $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 ';' rplot : RPLOT symbol_list ';' { driver.rplot($2); };
{ driver.end_trend_var($6); }
trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex ';'
{ driver.end_trend_var(false, $6, $8); }
;
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); }
; ;
log_trend_var_list : log_trend_var_list symbol var : VAR symbol_list_with_tex_and_partition ';'
{ driver.declare_trend_var(true, $2); } { driver.var($2); }
| log_trend_var_list COMMA symbol | VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
{ driver.declare_trend_var(true, $3); } { driver.end_nonstationary_var(false, $6, $8); }
| symbol | VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
{ driver.declare_trend_var(true, $1); } { driver.end_nonstationary_var(true, $6, $8); }
| 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); }
;
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); }
; ;
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(); } 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); } { driver.option_num("time_shift", $3); }
; ;
nonstationary_var_list : nonstationary_var_list symbol varexo : VAREXO symbol_list_with_tex_and_partition ';'
{ driver.declare_nonstationary_var($2); } { driver.varexo($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_det : VAREXO_DET varexo_det_list ';'; varexo_det : VAREXO_DET symbol_list_with_tex_and_partition ';'
{ driver.varexo_det($2); }
predetermined_variables : PREDETERMINED_VARIABLES predetermined_variables_list ';';
parameters : PARAMETERS parameter_list ';';
; ;
model_local_variable : MODEL_LOCAL_VARIABLE model_local_variable_list ';'; predetermined_variables : PREDETERMINED_VARIABLES symbol_list ';'
{ driver.predetermined_variables($2); }
;
named_var_elem : symbol EQUAL QUOTED_STRING parameters : PARAMETERS symbol_list_with_tex_and_partition ';'
{ $$ = { $1, $3 }; } { driver.parameters($2); }
;
named_var_1 : '(' named_var_elem model_local_variable : MODEL_LOCAL_VARIABLE symbol_list_with_tex ';'
{ $$ = { $2 }; } { driver.model_local_variable($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 ')' change_type : CHANGE_TYPE '(' change_type_arg ')' symbol_list ';'
| 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_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); }
;
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); }
;
change_type : CHANGE_TYPE '(' change_type_arg ')' change_type_var_list ';'
{ driver.change_type($3, $5); } { driver.change_type($3, $5); }
; ;
@ -677,20 +602,6 @@ change_type_arg : PARAMETERS
{ $$ = SymbolType::exogenousDet; } { $$ = 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 ';' periods : PERIODS INT_NUMBER ';'
{ driver.periods($2); } { driver.periods($2); }
| PERIODS EQUAL INT_NUMBER ';' | PERIODS EQUAL INT_NUMBER ';'
@ -1013,7 +924,7 @@ model_option : BLOCK { driver.block(); }
| USE_DLL { driver.use_dll(); } | USE_DLL { driver.use_dll(); }
| NO_STATIC { driver.no_static();} | NO_STATIC { driver.no_static();}
| DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); } | 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 | o_linear
| PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')' | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')'
| BALANCED_GROWTH_TEST_TOL EQUAL non_negative_number { driver.balanced_growth_test_tol($3); } | 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(); } { driver.add_lower_cholesky(); }
; ;
svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA svar_var_list ';' svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA symbol_list ';'
{ driver.add_restriction_in_equation($3); } { driver.add_restriction_in_equation($3, $5); }
| EQUATION INT_NUMBER COMMA svar_var_list ';' | EQUATION INT_NUMBER COMMA symbol_list ';'
{ driver.add_restriction_in_equation($2); } { 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 : expression {driver.check_restriction_expression_constant($1);}
| restriction_expression_1 | restriction_expression_1
; ;
@ -1676,13 +1581,13 @@ external_function_options : o_ext_func_name
; ;
stoch_simul : STOCH_SIMUL ';' stoch_simul : STOCH_SIMUL ';'
{ driver.stoch_simul(); } { driver.stoch_simul({}); }
| STOCH_SIMUL '(' stoch_simul_options_list ')' ';' | STOCH_SIMUL '(' stoch_simul_options_list ')' ';'
{ driver.stoch_simul(); } { driver.stoch_simul({}); }
| STOCH_SIMUL symbol_list ';' | STOCH_SIMUL symbol_list ';'
{ driver.stoch_simul(); } { driver.stoch_simul($2); }
| STOCH_SIMUL '(' stoch_simul_options_list ')' symbol_list ';' | 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 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 | 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 signed_integer : PLUS INT_NUMBER
{ $$ = $2; } { $$ = $2; }
| MINUS INT_NUMBER | MINUS INT_NUMBER
@ -2187,13 +2079,13 @@ options_eq_opt : symbol '.' OPTIONS
; ;
estimation : ESTIMATION ';' estimation : ESTIMATION ';'
{ driver.run_estimation(); } { driver.run_estimation({}); }
| ESTIMATION '(' estimation_options_list ')' ';' | ESTIMATION '(' estimation_options_list ')' ';'
{ driver.run_estimation(); } { driver.run_estimation({}); }
| ESTIMATION symbol_list ';' | ESTIMATION symbol_list ';'
{ driver.run_estimation(); } { driver.run_estimation($2); }
| ESTIMATION '(' estimation_options_list ')' symbol_list ';' | ESTIMATION '(' estimation_options_list ')' symbol_list ';'
{ driver.run_estimation(); } { driver.run_estimation($5); }
; ;
estimation_options_list : estimation_options_list COMMA estimation_options 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); } { 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 osr_options_list : osr_options_list COMMA osr_options
@ -2443,25 +2335,25 @@ osr_options : stoch_simul_primary_options
; ;
osr : OSR ';' osr : OSR ';'
{ driver.run_osr(); } { driver.run_osr({}); }
| OSR '(' osr_options_list ')' ';' | OSR '(' osr_options_list ')' ';'
{ driver.run_osr(); } { driver.run_osr({}); }
| OSR symbol_list ';' | OSR symbol_list ';'
{ driver.run_osr(); } { driver.run_osr($2); }
| OSR '(' osr_options_list ')' symbol_list ';' | OSR '(' osr_options_list ')' symbol_list ';'
{driver.run_osr(); } {driver.run_osr($5); }
; ;
dynatype : DYNATYPE '(' filename ')' ';' dynatype : DYNATYPE '(' filename ')' ';'
{ driver.run_dynatype($3); } { driver.run_dynatype($3, {}); }
| DYNATYPE '(' filename ')' symbol_list ';' | DYNATYPE '(' filename ')' symbol_list ';'
{ driver.run_dynatype($3); } { driver.run_dynatype($3, $5); }
; ;
dynasave : DYNASAVE '(' filename ')' ';' dynasave : DYNASAVE '(' filename ')' ';'
{ driver.run_dynasave($3); } { driver.run_dynasave($3, {}); }
| DYNASAVE '(' filename ')' symbol_list ';' | DYNASAVE '(' filename ')' symbol_list ';'
{ driver.run_dynasave($3); } { driver.run_dynasave($3, $5); }
; ;
load_params_and_steady_state : LOAD_PARAMS_AND_STEADY_STATE '(' filename ')' ';' load_params_and_steady_state : LOAD_PARAMS_AND_STEADY_STATE '(' filename ')' ';'
@ -2569,13 +2461,13 @@ ramsey_model : RAMSEY_MODEL ';'
; ;
ramsey_policy : RAMSEY_POLICY ';' ramsey_policy : RAMSEY_POLICY ';'
{ driver.ramsey_policy(); } { driver.ramsey_policy({}); }
| RAMSEY_POLICY '(' ramsey_policy_options_list ')' ';' | RAMSEY_POLICY '(' ramsey_policy_options_list ')' ';'
{ driver.ramsey_policy(); } { driver.ramsey_policy({}); }
| RAMSEY_POLICY symbol_list ';' | RAMSEY_POLICY symbol_list ';'
{ driver.ramsey_policy(); } { driver.ramsey_policy($2); }
| RAMSEY_POLICY '(' ramsey_policy_options_list ')' symbol_list ';' | RAMSEY_POLICY '(' ramsey_policy_options_list ')' symbol_list ';'
{ driver.ramsey_policy(); } { driver.ramsey_policy($5); }
; ;
ramsey_constraints : RAMSEY_CONSTRAINTS ';' ramsey_constraints_list END ';' ramsey_constraints : RAMSEY_CONSTRAINTS ';' ramsey_constraints_list END ';'
@ -2648,8 +2540,7 @@ occbin_solver : OCCBIN_SOLVER ';'
{ driver.occbin_solver(); } { driver.occbin_solver(); }
| OCCBIN_SOLVER '(' occbin_solver_options_list ')' ';' | OCCBIN_SOLVER '(' occbin_solver_options_list ')' ';'
{ driver.occbin_solver(); } { 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_options_list : occbin_solver_option COMMA occbin_solver_options_list
| occbin_solver_option | occbin_solver_option
@ -2679,13 +2570,13 @@ occbin_write_regimes_option : o_occbin_write_regimes_periods
; ;
occbin_graph : OCCBIN_GRAPH ';' occbin_graph : OCCBIN_GRAPH ';'
{ driver.occbin_graph(); } { driver.occbin_graph({}); }
| OCCBIN_GRAPH '(' occbin_graph_options_list ')' ';' | OCCBIN_GRAPH '(' occbin_graph_options_list ')' ';'
{ driver.occbin_graph(); } { driver.occbin_graph({}); }
| OCCBIN_GRAPH symbol_list ';' | OCCBIN_GRAPH symbol_list ';'
{ driver.occbin_graph(); } { driver.occbin_graph($2); }
| OCCBIN_GRAPH '(' occbin_graph_options_list ')' symbol_list ';' | 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 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 ; occbin_graph_option : o_occbin_graph_noconstant ;
discretionary_policy : DISCRETIONARY_POLICY ';' discretionary_policy : DISCRETIONARY_POLICY ';'
{ driver.discretionary_policy(); } { driver.discretionary_policy({}); }
| DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';' | DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';'
{ driver.discretionary_policy(); } { driver.discretionary_policy({}); }
| DISCRETIONARY_POLICY symbol_list ';' | DISCRETIONARY_POLICY symbol_list ';'
{ driver.discretionary_policy(); } { driver.discretionary_policy($2); }
| DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' symbol_list ';' | 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 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 ';' shock_decomposition : SHOCK_DECOMPOSITION ';'
{driver.shock_decomposition(); } { driver.shock_decomposition({}); }
| SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' ';' | SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' ';'
{ driver.shock_decomposition(); } { driver.shock_decomposition({}); }
| SHOCK_DECOMPOSITION symbol_list ';' | SHOCK_DECOMPOSITION symbol_list ';'
{ driver.shock_decomposition(); } { driver.shock_decomposition($2); }
| SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' symbol_list ';' | SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' symbol_list ';'
{ driver.shock_decomposition(); } { driver.shock_decomposition($5); }
; ;
realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';' realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';'
{driver.realtime_shock_decomposition(); } { driver.realtime_shock_decomposition({}); }
| REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' ';' | REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' ';'
{ driver.realtime_shock_decomposition(); } { driver.realtime_shock_decomposition({}); }
| REALTIME_SHOCK_DECOMPOSITION symbol_list ';' | REALTIME_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.realtime_shock_decomposition(); } { driver.realtime_shock_decomposition($2); }
| REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' symbol_list ';' | 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 ';' plot_shock_decomposition : PLOT_SHOCK_DECOMPOSITION ';'
{driver.plot_shock_decomposition(); } { driver.plot_shock_decomposition({}); }
| PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' ';' | PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' ';'
{ driver.plot_shock_decomposition(); } { driver.plot_shock_decomposition({}); }
| PLOT_SHOCK_DECOMPOSITION symbol_list ';' | PLOT_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.plot_shock_decomposition(); } { driver.plot_shock_decomposition($2); }
| PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' symbol_list ';' | 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 ';' initial_condition_decomposition : INITIAL_CONDITION_DECOMPOSITION ';'
{driver.initial_condition_decomposition(); } { driver.initial_condition_decomposition({}); }
| INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' ';' | INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' ';'
{ driver.initial_condition_decomposition(); } { driver.initial_condition_decomposition({}); }
| INITIAL_CONDITION_DECOMPOSITION symbol_list ';' | INITIAL_CONDITION_DECOMPOSITION symbol_list ';'
{ driver.initial_condition_decomposition(); } { driver.initial_condition_decomposition($2); }
| INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' symbol_list ';' | 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 ';' squeeze_shock_decomposition : SQUEEZE_SHOCK_DECOMPOSITION ';'
{ driver.squeeze_shock_decomposition(); } { driver.squeeze_shock_decomposition({}); }
| SQUEEZE_SHOCK_DECOMPOSITION symbol_list ';' | SQUEEZE_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.squeeze_shock_decomposition(); } { driver.squeeze_shock_decomposition($2); }
; ;
bvar_prior_option : o_bvar_prior_tau 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 ';' ms_irf : MS_IRF ';'
{ driver.ms_irf(); } { driver.ms_irf({}); }
| MS_IRF '(' ms_irf_options_list ')' ';' | MS_IRF '(' ms_irf_options_list ')' ';'
{ driver.ms_irf(); } { driver.ms_irf({}); }
| MS_IRF symbol_list ';' | MS_IRF symbol_list ';'
{ driver.ms_irf(); } { driver.ms_irf($2); }
| MS_IRF '(' ms_irf_options_list ')' symbol_list ';' | MS_IRF '(' ms_irf_options_list ')' symbol_list ';'
{ driver.ms_irf(); } { driver.ms_irf($5); }
; ;
ms_compute_probabilities_option : o_output_file_tag 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);} { driver.homotopy_val($1, nullptr, $3);}
; ;
forecast: FORECAST ';' {driver.forecast();} forecast: FORECAST ';'
| FORECAST '(' forecast_options ')' ';' {driver.forecast();} { driver.forecast({}); }
| FORECAST symbol_list ';' {driver.forecast();} | FORECAST '(' forecast_options ')' ';'
| FORECAST '(' forecast_options ')' symbol_list ';' {driver.forecast();} { driver.forecast({}); }
; | FORECAST symbol_list ';'
{ driver.forecast($2); }
| FORECAST '(' forecast_options ')' symbol_list ';'
{ driver.forecast($5); }
;
forecast_options: forecast_option forecast_options: forecast_option
| forecast_options COMMA forecast_option | forecast_options COMMA forecast_option
@ -3286,9 +3181,9 @@ conditional_forecast_option : o_periods
; ;
plot_conditional_forecast : PLOT_CONDITIONAL_FORECAST symbol_list ';' 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 ';' | 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 ';' 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 ';' steady_state_equation : symbol EQUAL expression ';'
{ driver.add_steady_state_model_equal($1, $3); } { driver.add_steady_state_model_equal($1, $3); }
| '[' symbol_list ']' EQUAL expression ';' | '[' 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 ';' calib_smoother : CALIB_SMOOTHER ';'
{ driver.calib_smoother(); } { driver.calib_smoother({}); }
| CALIB_SMOOTHER '(' calib_smoother_options_list ')' ';' | CALIB_SMOOTHER '(' calib_smoother_options_list ')' ';'
{ driver.calib_smoother(); } { driver.calib_smoother({}); }
| CALIB_SMOOTHER symbol_list ';' | CALIB_SMOOTHER symbol_list ';'
{ driver.calib_smoother(); } { driver.calib_smoother($2); }
| CALIB_SMOOTHER '(' calib_smoother_options_list ')' symbol_list ';' | 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 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_nofunctions : NOFUNCTIONS { driver.option_num("nofunctions", "true"); };
o_nomoments : NOMOMENTS { driver.option_num("nomoments", "true"); }; o_nomoments : NOMOMENTS { driver.option_num("nomoments", "true"); };
o_irf : IRF EQUAL INT_NUMBER { driver.option_num("irf", $3); }; 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_filter : HP_FILTER EQUAL non_negative_number { driver.option_num("hp_filter", $3); };
o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER { 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."); 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_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_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_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_namendo : NAMENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namendo", $4); };
o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namlagendo"); }; o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namlagendo", $4); };
o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namexo"); }; 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_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_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_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_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); }; 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_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_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 o_parameter_set : PARAMETER_SET EQUAL PRIOR_MODE
{ driver.option_str("parameter_set", "prior_mode"); } { driver.option_str("parameter_set", "prior_mode"); }
| PARAMETER_SET EQUAL PRIOR_MEAN | 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_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_data : DATA EQUAL filename { driver.option_str("ms.data", $3); };
o_vlist : VLIST EQUAL INT_NUMBER {driver.option_num("ms.vlist",$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_vlistper : VLISTPER EQUAL INT_NUMBER {driver.option_num("ms.vlistper",$3); };
o_restriction_fname : RESTRICTION_FNAME EQUAL NAME 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_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_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_coefficients : COEFFICIENTS { driver.option_str("ms.coefficients","svar_coefficients"); };
o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); }; o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); };
o_equations : EQUATIONS EQUAL vec_int o_equations : EQUATIONS EQUAL vec_int
@ -4014,7 +3909,7 @@ o_equations : EQUATIONS EQUAL vec_int
{ driver.option_vec_int("ms.equations",$3); } { driver.option_vec_int("ms.equations",$3); }
; ;
o_silent_optimizer : SILENT_OPTIMIZER { driver.option_num("silent_optimizer", "true"); }; 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_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); }; 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_no_homotopy : NO_HOMOTOPY { driver.option_num("no_homotopy", "true"); };
o_infile : INFILE EQUAL filename { driver.option_str("infile", $3); }; 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_period : PERIOD EQUAL INT_NUMBER { driver.option_num("period", $3); };
o_outfile : OUTFILE EQUAL filename { driver.option_str("outfile", $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_lmmcp : LMMCP {driver.option_num("lmmcp.status", "true"); };
o_function : FUNCTION EQUAL filename { driver.option_str("function", $3); }; o_function : FUNCTION EQUAL filename { driver.option_str("function", $3); };
o_sampling_draws : SAMPLING_DRAWS EQUAL INT_NUMBER { driver.option_num("sampling_draws",$3); }; o_sampling_draws : SAMPLING_DRAWS EQUAL INT_NUMBER { driver.option_num("sampling_draws",$3); };

View File

@ -492,8 +492,8 @@ Epilogue::writeOutput(ostream &output) const
for (const auto & [symb_id, expr] : dynamic_def_table) for (const auto & [symb_id, expr] : dynamic_def_table)
expr->collectVariables(SymbolType::endogenous, endogs); expr->collectVariables(SymbolType::endogenous, endogs);
SymbolList symbol_list; vector<string> symbol_list;
for (auto symb_id : endogs) for (auto symb_id : endogs)
symbol_list.addSymbol(symbol_table.getName(symb_id)); symbol_list.push_back(symbol_table.getName(symb_id));
symbol_list.writeOutput("M_.epilogue_var_list_", output); SymbolList{move(symbol_list)}.writeOutput("M_.epilogue_var_list_", output);
} }

View File

@ -91,8 +91,6 @@ ParsingDriver::parse(istream &in, bool debug)
{ {
mod_file = make_unique<ModFile>(warnings); mod_file = make_unique<ModFile>(warnings);
symbol_list.setSymbolTable(mod_file->symbol_table);
reset_data_tree(); reset_data_tree();
estim_params.init(*data_tree); estim_params.init(*data_tree);
osr_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); 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 void
ParsingDriver::declare_exogenous(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value) 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 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)
{ {
declare_symbol(name, SymbolType::exogenousDet, tex_name, partition_value); 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)
{
for (auto &[name, tex_name, partition] : symbol_list)
declare_symbol(name, SymbolType::exogenousDet, tex_name, partition);
} }
void 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); 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 void
ParsingDriver::declare_statement_local_variable(const string &name) ParsingDriver::declare_statement_local_variable(const string &name)
{ {
@ -247,15 +267,15 @@ ParsingDriver::begin_trend()
} }
void 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, {}); vector<int> declared_trend_vars;
declared_trend_vars.push_back(mod_file->symbol_table.getID(name)); 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 try
{ {
dynamic_model->addTrendVariables(declared_trend_vars, growth_factor); dynamic_model->addTrendVariables(declared_trend_vars, growth_factor);
@ -269,11 +289,14 @@ ParsingDriver::end_trend_var(expr_t growth_factor)
} }
void void
ParsingDriver::add_predetermined_variable(const string &name) ParsingDriver::predetermined_variables(const vector<string> &symbol_list)
{ {
check_symbol_is_endogenous(name); for (auto &name : symbol_list)
int symb_id = mod_file->symbol_table.getID(name); {
mod_file->symbol_table.markPredetermined(symb_id); check_symbol_is_endogenous(name);
int symb_id = mod_file->symbol_table.getID(name);
mod_file->symbol_table.markPredetermined(symb_id);
}
} }
void void
@ -449,17 +472,17 @@ ParsingDriver::add_expression_variable(const string &name)
} }
void 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; mod_file->nonstationary_variables = true;
}
void vector<int> declared_nonstationary_vars;
ParsingDriver::end_nonstationary_var(bool log_deflator, expr_t deflator) 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 try
{ {
dynamic_model->addNonstationaryVariables(declared_nonstationary_vars, log_deflator, deflator); 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 void
ParsingDriver::forecast() ParsingDriver::forecast(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<ForecastStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<ForecastStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
@ -646,13 +669,12 @@ ParsingDriver::differentiate_forward_vars_all()
} }
void 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 = 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) for (auto &it : mod_file->differentiate_forward_vars_subset)
check_symbol_is_endogenous(it); check_symbol_is_endogenous(it);
symbol_list.clear();
} }
void void
@ -989,7 +1011,6 @@ ParsingDriver::end_svar_identification()
svar_lower_cholesky, svar_lower_cholesky,
svar_constants_exclusion, svar_constants_exclusion,
mod_file->symbol_table)); mod_file->symbol_table));
svar_restriction_symbols.clear();
svar_equation_restrictions.clear(); svar_equation_restrictions.clear();
svar_ident_restrictions.clear(); svar_ident_restrictions.clear();
svar_Qi_restriction_nbr.clear(); svar_Qi_restriction_nbr.clear();
@ -1026,7 +1047,7 @@ ParsingDriver::combine_lag_and_restriction(const string &lag)
} }
void 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); int eqn = stoi(equation);
if (eqn < 1) if (eqn < 1)
@ -1035,22 +1056,19 @@ ParsingDriver::add_restriction_in_equation(const string &equation)
if (svar_equation_restrictions.count(eqn) > 0) if (svar_equation_restrictions.count(eqn) > 0)
error("equation number " + equation + " referenced more than once under a single lag."); error("equation number " + equation + " referenced more than once under a single lag.");
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(name + " restriction added twice.");
svar_restriction_symbols.push_back(symb_id);
}
svar_equation_restrictions[eqn] = svar_restriction_symbols; 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);
for (const auto &viit : svar_restriction_symbols)
if (symb_id == viit)
error(tmp_var + " restriction added twice.");
svar_restriction_symbols.push_back(symb_id);
} }
void void
@ -1274,7 +1292,7 @@ ParsingDriver::option_date(string name_option, string opt)
} }
void 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) if (options_list.symbol_list_options.find(name_option)
!= options_list.symbol_list_options.end()) != options_list.symbol_list_options.end())
@ -1282,8 +1300,7 @@ ParsingDriver::option_symbol_list(string name_option)
if (name_option.compare("irf_shocks") == 0) if (name_option.compare("irf_shocks") == 0)
{ {
vector<string> shocks = symbol_list.get_symbols(); for (auto &shock : symbol_list)
for (auto &shock : shocks)
{ {
if (!mod_file->symbol_table.exists(shock)) if (!mod_file->symbol_table.exists(shock))
error("Unknown symbol: " + shock); error("Unknown symbol: " + shock);
@ -1294,14 +1311,12 @@ ParsingDriver::option_symbol_list(string name_option)
if (name_option.compare("ms.parameters") == 0) if (name_option.compare("ms.parameters") == 0)
{ {
vector<string> parameters = symbol_list.get_symbols(); for (auto &it : symbol_list)
for (auto &it : parameters)
if (mod_file->symbol_table.getType(it) != SymbolType::parameter) 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); 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; options_list.symbol_list_options[move(name_option)] = move(symbol_list);
symbol_list.clear();
} }
void void
@ -1350,27 +1365,22 @@ ParsingDriver::linear()
} }
void 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 void
ParsingDriver::rplot() ParsingDriver::stoch_simul(SymbolList symbol_list)
{
mod_file->addStatement(make_unique<RplotStatement>(symbol_list));
symbol_list.clear();
}
void
ParsingDriver::stoch_simul()
{ {
//make sure default order is known to preprocessor, see #49 //make sure default order is known to preprocessor, see #49
if (options_list.num_options.find("order") == options_list.num_options.end()) if (options_list.num_options.find("order") == options_list.num_options.end())
options_list.num_options["order"] = "2"; options_list.num_options["order"] = "2";
mod_file->addStatement(make_unique<StochSimulStatement>(symbol_list, options_list)); symbol_list.removeDuplicates("stoch_simul", warnings);
symbol_list.clear();
mod_file->addStatement(make_unique<StochSimulStatement>(move(symbol_list), options_list,
mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
@ -1519,7 +1529,6 @@ ParsingDriver::set_unit_root_vars()
{ {
mod_file->addStatement(make_unique<UnitRootVarsStatement>()); mod_file->addStatement(make_unique<UnitRootVarsStatement>());
warning("''unit_root_vars'' is now obsolete; use the ''diffuse_filter'' option of ''estimation'' instead"); warning("''unit_root_vars'' is now obsolete; use the ''diffuse_filter'' option of ''estimation'' instead");
symbol_list.clear();
} }
void void
@ -1817,10 +1826,9 @@ ParsingDriver::set_corr_options(const string &name1, const string &name2, const
} }
void 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)); mod_file->addStatement(make_unique<EstimationStatement>(mod_file->symbol_table, move(symbol_list), options_list));
symbol_list.clear();
options_list.clear(); options_list.clear();
} }
@ -1951,32 +1959,31 @@ ParsingDriver::optim_weights()
} }
void 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)); mod_file->addStatement(make_unique<OsrParamsStatement>(move(symbol_list), mod_file->symbol_table));
symbol_list.clear();
} }
void void
ParsingDriver::run_osr() ParsingDriver::run_osr(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<OsrStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<OsrStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
void 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)); mod_file->addStatement(make_unique<DynaTypeStatement>(move(symbol_list), filename,
symbol_list.clear(); mod_file->symbol_table));
} }
void 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)); mod_file->addStatement(make_unique<DynaSaveStatement>(move(symbol_list), filename,
symbol_list.clear(); mod_file->symbol_table));
} }
void void
@ -2084,7 +2091,7 @@ ParsingDriver::ramsey_model()
} }
void 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."); 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()) for (const auto &s : it->second.getSymbols())
check_symbol_is_endogenous(s); 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(); options_list.clear();
symbol_list.clear();
planner_discount = nullptr; planner_discount = nullptr;
} }
@ -2146,15 +2153,14 @@ ParsingDriver::occbin_write_regimes()
} }
void 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(); options_list.clear();
symbol_list.clear();
} }
void void
ParsingDriver::discretionary_policy() ParsingDriver::discretionary_policy(vector<string> symbol_list)
{ {
/* The logic here is different from “ramsey_policy” and “ramsey_model”, /* The logic here is different from “ramsey_policy” and “ramsey_model”,
because we want to allow several instances of discretionary_policy in 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()) for (const auto &s : it->second.getSymbols())
check_symbol_is_endogenous(s); check_symbol_is_endogenous(s);
mod_file->addStatement(make_unique<DiscretionaryPolicyStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<DiscretionaryPolicyStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
planner_discount = nullptr; planner_discount = nullptr;
} }
@ -2252,10 +2258,10 @@ ParsingDriver::ms_compute_probabilities()
} }
void void
ParsingDriver::ms_irf() ParsingDriver::ms_irf(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<MSSBVARIrfStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<MSSBVARIrfStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
@ -2332,42 +2338,44 @@ ParsingDriver::markov_switching()
} }
void void
ParsingDriver::shock_decomposition() ParsingDriver::shock_decomposition(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<ShockDecompositionStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<ShockDecompositionStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
void void
ParsingDriver::realtime_shock_decomposition() ParsingDriver::realtime_shock_decomposition(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<RealtimeShockDecompositionStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<RealtimeShockDecompositionStatement>(move(symbol_list),
symbol_list.clear(); options_list,
mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
void void
ParsingDriver::plot_shock_decomposition() ParsingDriver::plot_shock_decomposition(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<PlotShockDecompositionStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<PlotShockDecompositionStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
void void
ParsingDriver::initial_condition_decomposition() ParsingDriver::initial_condition_decomposition(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<InitialConditionDecompositionStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<InitialConditionDecompositionStatement>(move(symbol_list),
symbol_list.clear(); options_list,
mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
void void
ParsingDriver::squeeze_shock_decomposition() ParsingDriver::squeeze_shock_decomposition(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<SqueezeShockDecompositionStatement>(symbol_list)); mod_file->addStatement(make_unique<SqueezeShockDecompositionStatement>(move(symbol_list),
symbol_list.clear(); mod_file->symbol_table));
} }
void void
@ -2378,11 +2386,11 @@ ParsingDriver::conditional_forecast()
} }
void 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); int nperiods = periods.empty() ? -1 : stoi(periods);
mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(nperiods, symbol_list)); mod_file->addStatement(make_unique<PlotConditionalForecastStatement>(nperiods, move(symbol_list),
symbol_list.clear(); mod_file->symbol_table));
} }
void void
@ -2393,10 +2401,10 @@ ParsingDriver::conditional_forecast_paths()
} }
void void
ParsingDriver::calib_smoother() ParsingDriver::calib_smoother(vector<string> symbol_list)
{ {
mod_file->addStatement(make_unique<CalibSmootherStatement>(symbol_list, options_list)); mod_file->addStatement(make_unique<CalibSmootherStatement>(move(symbol_list), options_list,
symbol_list.clear(); mod_file->symbol_table));
options_list.clear(); options_list.clear();
} }
@ -2465,9 +2473,10 @@ ParsingDriver::add_model_equal_with_zero_rhs(expr_t arg)
} }
void 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 void
@ -2499,9 +2508,9 @@ ParsingDriver::declare_and_init_model_local_variable(const string &name, expr_t
} }
void 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; int id;
try try
@ -3147,12 +3156,11 @@ ParsingDriver::add_steady_state_model_equal(const string &varname, expr_t expr)
} }
void 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; vector<int> ids;
for (const auto &symb : symbs) for (const auto &symb : symbol_list)
{ {
int id; int id;
try try
@ -3171,14 +3179,12 @@ ParsingDriver::add_steady_state_model_equal_multiple(expr_t expr)
} }
mod_file->steady_state_model.addMultipleDefinitions(ids, expr); mod_file->steady_state_model.addMultipleDefinitions(ids, expr);
symbol_list.clear();
} }
void 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 void
@ -3640,15 +3646,14 @@ ParsingDriver::begin_model_replace(const vector<pair<string, string>> &listed_eq
} }
void 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); check_symbol_existence(name);
int symb_id = mod_file->symbol_table.getID(name); int symb_id = mod_file->symbol_table.getID(name);
mod_file->symbol_table.changeType(symb_id, SymbolType::excludedVariable); mod_file->symbol_table.changeType(symb_id, SymbolType::excludedVariable);
} }
symbol_list.clear();
} }
void void

View File

@ -111,9 +111,6 @@ private:
//! Helper to add a symbol declaration //! 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); 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 //! Temporary store for the planner objective
unique_ptr<StaticModel> planner_objective; unique_ptr<StaticModel> planner_objective;
@ -185,8 +182,6 @@ private:
SvarIdentificationStatement::svar_identification_restrictions_t svar_ident_restrictions; SvarIdentificationStatement::svar_identification_restrictions_t svar_ident_restrictions;
//! Temporary storage for mapping the equation number to the restrictions within an svar_identification block //! Temporary storage for mapping the equation number to the restrictions within an svar_identification block
map<int, vector<int>> svar_equation_restrictions; 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 //! Temporary storage for constants exculsion within an svar_identification
bool svar_constants_exclusion; bool svar_constants_exclusion;
//! Temporary storage for upper cholesky within an svar_identification block //! Temporary storage for upper cholesky within an svar_identification block
@ -222,10 +217,6 @@ private:
int current_external_function_id; int current_external_function_id;
//! Temporary storage for option list provided to external_function() //! Temporary storage for option list provided to external_function()
ExternalFunctionsTable::external_function_options current_external_function_options; 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 //! Temporary storage for a variance declared in the prior statement
expr_t prior_variance; expr_t prior_variance;
SubsamplesStatement::subsample_declaration_map_t subsample_declaration_map; SubsamplesStatement::subsample_declaration_map_t subsample_declaration_map;
@ -246,7 +237,7 @@ private:
//! Adds a model lagged variable to ModelTree and VariableTable //! Adds a model lagged variable to ModelTree and VariableTable
expr_t add_model_variable(int symb_id, int lag); expr_t add_model_variable(int symb_id, int lag);
//! For parsing the graph_format option //! For parsing the graph_format option
SymbolList graph_formats; vector<string> graph_formats;
//! Temporary storage for equation tags //! Temporary storage for equation tags
map<string, string> eq_tags; map<string, string> eq_tags;
// Temporary storages for pac_target_info // Temporary storages for pac_target_info
@ -342,7 +333,7 @@ public:
//! the differentiate_forward_vars option is enabled (for all vars) //! the differentiate_forward_vars option is enabled (for all vars)
void differentiate_forward_vars_all(); void differentiate_forward_vars_all();
//! the differentiate_forward_vars option is enabled (for a subset of vars) //! 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 //! cutoff option of model block
void cutoff(const string &value); void cutoff(const string &value);
//! mfs option of model block //! mfs option of model block
@ -363,14 +354,20 @@ public:
void initval_file(); void initval_file();
//! Declares an endogenous variable //! Declares an endogenous variable
void declare_endogenous(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); 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 //! Declares an exogenous variable
void declare_exogenous(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); void declare_exogenous(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {});
//! Declares an exogenous deterministic variable // Handles a “varexo” statement
void declare_exogenous_det(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); 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 //! Declares a parameter
void declare_parameter(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); void declare_parameter(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {});
//! Declares a model local variable // Handles a “parameters” statement
void declare_model_local_variable(const string &name, const string &tex_name = ""); 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 //! Declares a statement local variable
void declare_statement_local_variable(const string &name); void declare_statement_local_variable(const string &name);
//! Completes a subsample statement //! Completes a subsample statement
@ -386,12 +383,12 @@ public:
void set_planner_discount(expr_t value); void set_planner_discount(expr_t value);
//! Sets the value of the planner_discount_latex_name option of ramsey_model //! Sets the value of the planner_discount_latex_name option of ramsey_model
void set_planner_discount_latex_name(string tex_name); void set_planner_discount_latex_name(string tex_name);
//! Adds a predetermined_variable //! Handles a “predetermined_variables” statement
void add_predetermined_variable(const string &name); void predetermined_variables(const vector<string> &symbol_list);
//! Declares and initializes a local parameter //! Declares and initializes a local parameter
void declare_and_init_model_local_variable(const string &name, expr_t rhs); void declare_and_init_model_local_variable(const string &name, expr_t rhs);
//! Changes type of a symbol //! 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 //! Adds a list of tags for the current equation
void add_equation_tags(string key, string value); void add_equation_tags(string key, string value);
//! Adds a non-negative constant to DataTree //! Adds a non-negative constant to DataTree
@ -490,8 +487,8 @@ public:
void option_str(string name_option, string opt); void option_str(string name_option, string opt);
//! Sets an option to a date value //! Sets an option to a date value
void option_date(string name_option, string opt); void option_date(string name_option, string opt);
//! Sets an option to a list of symbols (used in conjunction with add_in_symbol_list()) //! Sets an option to a list of symbols
void option_symbol_list(string name_option); void option_symbol_list(string name_option, vector<string> symbol_list);
//! Sets an option to a vector of integers //! Sets an option to a vector of integers
void option_vec_int(string name_option, vector<int> opt); void option_vec_int(string name_option, vector<int> opt);
//! Sets an option to a vector of strings //! Sets an option to a vector of strings
@ -500,12 +497,10 @@ public:
void option_vec_cellstr(string name_option, vector<string> opt); void option_vec_cellstr(string name_option, vector<string> opt);
//! Indicates that the model is linear //! Indicates that the model is linear
void linear(); void linear();
//! Adds a variable to temporary symbol list
void add_in_symbol_list(const string &tmp_var);
//! Writes a rplot() command //! Writes a rplot() command
void rplot(); void rplot(vector<string> symbol_list);
//! Writes a stock_simul command //! Writes a stock_simul command
void stoch_simul(); void stoch_simul(SymbolList symbol_list);
//! Writes a trend component command //! Writes a trend component command
void trend_component_model(); void trend_component_model();
//! Writes a var (vector autoregression) command //! Writes a var (vector autoregression) command
@ -563,7 +558,7 @@ public:
//! Sets the options for estimated correlation //! Sets the options for estimated correlation
void set_corr_options(const string &name1, const string &name2, const string &subsample_name); void set_corr_options(const string &name1, const string &name2, const string &subsample_name);
//! Runs estimation process //! Runs estimation process
void run_estimation(); void run_estimation(vector<string> symbol_list);
//! Runs dynare_sensitivy() //! Runs dynare_sensitivy()
void dynare_sensitivity(); void dynare_sensitivity();
//! Check that no observed variable has yet be defined //! 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 //! Svar_Identification Statement: match list of restrictions and equation number with lag
void combine_lag_and_restriction(const string &lag); void combine_lag_and_restriction(const string &lag);
//! Svar_Identification Statement: match list of restrictions with equation number //! Svar_Identification Statement: match list of restrictions with equation number
void add_restriction_in_equation(const string &equation); void add_restriction_in_equation(const string &equation, const vector<string> &symbol_list);
//! Svar_Identification Statement: add list of restriction symbol ids
void add_in_svar_restriction_symbols(const string &tmp_var);
//! Svar_Identification Statement: add exclusions of constants //! Svar_Identification Statement: add exclusions of constants
void add_constants_exclusion(); void add_constants_exclusion();
//! Svar_Identification Statement: add equation number for following restriction equations //! 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_element(string name);
void add_generate_irfs_exog_element(string exo, const string &value); void add_generate_irfs_exog_element(string exo, const string &value);
//! Forecast Statement //! Forecast Statement
void forecast(); void forecast(vector<string> symbol_list);
void set_trends(); void set_trends();
void set_deterministic_trends(); void set_deterministic_trends();
void set_trend_element(string arg1, expr_t arg2); void set_trend_element(string arg1, expr_t arg2);
@ -624,10 +617,10 @@ public:
void optim_weights(); void optim_weights();
void set_optim_weights(string name, expr_t value); void set_optim_weights(string name, expr_t value);
void set_optim_weights(const string &name1, const string &name2, expr_t value); void set_optim_weights(const string &name1, const string &name2, expr_t value);
void set_osr_params(); void set_osr_params(vector<string> symbol_list);
void run_osr(); void run_osr(vector<string> symbol_list);
void run_dynasave(const string &filename); void run_dynasave(const string &filename, vector<string> symbol_list);
void run_dynatype(const string &filename); void run_dynatype(const string &filename, vector<string> symbol_list);
void run_load_params_and_steady_state(const string &filename); void run_load_params_and_steady_state(const string &filename);
void run_save_params_and_steady_state(const string &filename); void run_save_params_and_steady_state(const string &filename);
void run_identification(); void run_identification();
@ -652,7 +645,7 @@ public:
//! Ramsey constraint helper function //! Ramsey constraint helper function
void add_ramsey_constraint(const string &name, BinaryOpcode op_code, const expr_t rhs); void add_ramsey_constraint(const string &name, BinaryOpcode op_code, const expr_t rhs);
//! Ramsey policy statement //! Ramsey policy statement
void ramsey_policy(); void ramsey_policy(vector<string> symbol_list);
//! Evaluate Planner Objective //! Evaluate Planner Objective
void evaluate_planner_objective(); void evaluate_planner_objective();
//! Set up Occbin //! Set up Occbin
@ -662,9 +655,9 @@ public:
//! Run Occbin write XLS //! Run Occbin write XLS
void occbin_write_regimes(); void occbin_write_regimes();
//! Run plotting of Occbin results //! Run plotting of Occbin results
void occbin_graph(); void occbin_graph(vector<string> symbol_list);
//! Discretionary policy statement //! Discretionary policy statement
void discretionary_policy(); void discretionary_policy(vector<string> symbol_list);
//! Adds a write_latex_dynamic_model statement //! Adds a write_latex_dynamic_model statement
void write_latex_dynamic_model(bool write_equation_tags); void write_latex_dynamic_model(bool write_equation_tags);
//! Adds a write_latex_static_model statement //! Adds a write_latex_static_model statement
@ -688,7 +681,7 @@ public:
//! Markov Switching Statement: Probabilities //! Markov Switching Statement: Probabilities
void ms_compute_probabilities(); void ms_compute_probabilities();
//! Markov Switching Statement: IRF //! Markov Switching Statement: IRF
void ms_irf(); void ms_irf(vector<string> symbol_list);
//! Markov Switching Statement: Forecast //! Markov Switching Statement: Forecast
void ms_forecast(); void ms_forecast();
//! Markov Switching Statement: Variance Decomposition //! Markov Switching Statement: Variance Decomposition
@ -698,23 +691,23 @@ public:
//! MarkovSwitching statement //! MarkovSwitching statement
void markov_switching(); void markov_switching();
//! Shock decomposition //! Shock decomposition
void shock_decomposition(); void shock_decomposition(vector<string> symbol_list);
//! Realtime Shock decomposition //! Realtime Shock decomposition
void realtime_shock_decomposition(); void realtime_shock_decomposition(vector<string> symbol_list);
//! Plot Shock decomposition //! Plot Shock decomposition
void plot_shock_decomposition(); void plot_shock_decomposition(vector<string> symbol_list);
//! Initial Condition decomposition //! Initial Condition decomposition
void initial_condition_decomposition(); void initial_condition_decomposition(vector<string> symbol_list);
//! squeeze_shock_decomposition statement //! squeeze_shock_decomposition statement
void squeeze_shock_decomposition(); void squeeze_shock_decomposition(vector<string> symbol_list);
//! Conditional forecast statement //! Conditional forecast statement
void conditional_forecast(); void conditional_forecast();
//! Conditional forecast paths block //! Conditional forecast paths block
void conditional_forecast_paths(); void conditional_forecast_paths();
//! Plot conditional forecast statement //! 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 //! Smoother on calibrated models
void calib_smoother(); void calib_smoother(vector<string> symbol_list);
//! Extended path //! Extended path
void extended_path(); void extended_path();
//! Writes token "arg1=arg2" to model tree //! Writes token "arg1=arg2" to model tree
@ -847,19 +840,15 @@ public:
//! Add an assignment equation in steady_state_model block //! Add an assignment equation in steady_state_model block
void add_steady_state_model_equal(const string &varname, expr_t expr); void add_steady_state_model_equal(const string &varname, expr_t expr);
//! Add a multiple assignment equation in steady_state_model block //! 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 //! Switches datatree
void begin_trend(); 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 //! Ends declaration of trend variable
void end_trend_var(expr_t growth_factor); void end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list);
//! 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 = {});
//! Ends declaration of nonstationary variable //! 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 //! 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 //! Add the graph_format option to the OptionsList structure
void process_graph_format_option(); void process_graph_format_option();
//! Add the graph_format option to the initial_condition_decomp substructure of the OptionsList structure //! 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 // Begin a model_replace statement
void begin_model_replace(const vector<pair<string, string>> &listed_eqs_by_tags); void begin_model_replace(const vector<pair<string, string>> &listed_eqs_by_tags);
// Add a var_remove statement // Add a var_remove statement
void var_remove(); void var_remove(const vector<string> &symbol_list);
void begin_pac_target_info(string name); void begin_pac_target_info(string name);
void end_pac_target_info(); void end_pac_target_info();
void set_pac_target_info_target(expr_t target); void set_pac_target_info_target(expr_t target);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2003-2021 Dynare Team * Copyright © 2003-2022 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -21,21 +21,14 @@
#include "SymbolList.hh" #include "SymbolList.hh"
void SymbolList::SymbolList(vector<string> symbols_arg) :
SymbolList::setSymbolTable(const SymbolTable &symbol_table_arg) symbols{move(symbols_arg)}
{ {
symbol_table = &symbol_table_arg;
} }
void void
SymbolList::addSymbol(const string &symbol) SymbolList::checkPass(WarningConsolidation &warnings, const vector<SymbolType> &types,
{ const SymbolTable &symbol_table) const noexcept(false)
symbols.push_back(symbol);
}
void
SymbolList::checkPass(WarningConsolidation &warnings,
const vector<SymbolType> &types) const noexcept(false)
{ {
if (types.empty()) if (types.empty())
return; return;
@ -51,7 +44,7 @@ SymbolList::checkPass(WarningConsolidation &warnings,
regex re("^(" + regex_str +")"); regex re("^(" + regex_str +")");
for (const auto &symbol : symbols) for (const auto &symbol : symbols)
{ {
if (!symbol_table->exists(symbol)) if (!symbol_table.exists(symbol))
{ {
if (regex_search(symbol, m, re)) if (regex_search(symbol, m, re))
{ {
@ -66,7 +59,7 @@ SymbolList::checkPass(WarningConsolidation &warnings,
bool type_found = false; bool type_found = false;
for (auto type : types) for (auto type : types)
if (symbol_table->getType(symbol) == type) if (symbol_table.getType(symbol) == type)
{ {
type_found = true; type_found = true;
break; break;
@ -148,18 +141,6 @@ SymbolList::writeJsonOutput(ostream &output) const
output << "]"; output << "]";
} }
void
SymbolList::clear()
{
symbols.clear();
}
int
SymbolList::getSize() const
{
return symbols.size();
}
vector<string> vector<string>
SymbolList::getSymbols() const SymbolList::getSymbols() const
{ {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright © 2003-2019 Dynare Team * Copyright © 2003-2022 Dynare Team
* *
* This file is part of Dynare. * This file is part of Dynare.
* *
@ -35,10 +35,12 @@ using namespace std;
class SymbolList class SymbolList
{ {
private: private:
//! Internal container for symbol list
vector<string> symbols; vector<string> symbols;
const SymbolTable *symbol_table;
public: public:
SymbolList() = default;
// This constructor is deliberately not marked explicit, to allow implicit conversion
SymbolList(vector<string> symbols_arg);
class SymbolListException class SymbolListException
{ {
public: public:
@ -47,14 +49,10 @@ public:
{ {
}; };
}; };
//! Set symbol table pointer //! Remove duplicate symbols
void setSymbolTable(const SymbolTable &symbol_table_arg);
//! Adds a symbol to the list
void addSymbol(const string &symbol);
//! Removed duplicate symbols
void removeDuplicates(const string &dynare_command, WarningConsolidation &warnings); void removeDuplicates(const string &dynare_command, WarningConsolidation &warnings);
//! Check symbols to ensure variables have been declared and are endogenous //! 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 //! Output content in Matlab format
/*! Creates a string array for Matlab, stored in variable "varname" */ /*! Creates a string array for Matlab, stored in variable "varname" */
void writeOutput(const string &varname, ostream &output) const; void writeOutput(const string &varname, ostream &output) const;
@ -62,22 +60,12 @@ public:
void write(ostream &output) const; void write(ostream &output) const;
//! Write JSON output //! Write JSON output
void writeJsonOutput(ostream &output) const; 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 //! Is Empty
int int
empty() const empty() const
{ {
return symbols.empty(); return symbols.empty();
}; };
//! Return the number of Symbols contained in the list
int getSize() const;
//! Return the list of symbols //! Return the list of symbols
vector<string> getSymbols() const; vector<string> getSymbols() const;
}; };