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 << "}";
}
StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
StochSimulStatement::StochSimulStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -373,11 +374,9 @@ StochSimulStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli
exit(EXIT_FAILURE);
}
symbol_list.removeDuplicates("stoch_simul", warnings);
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -418,10 +417,11 @@ StochSimulStatement::writeJsonOutput(ostream &output) const
output << "}";
}
ForecastStatement::ForecastStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
ForecastStatement::ForecastStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -430,7 +430,7 @@ ForecastStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -620,9 +620,11 @@ RamseyConstraintsStatement::writeJsonOutput(ostream &output) const
}
RamseyPolicyStatement::RamseyPolicyStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -668,7 +670,7 @@ RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConso
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -733,9 +735,11 @@ EvaluatePlannerObjectiveStatement::writeJsonOutput(ostream &output) const
}
DiscretionaryPolicyStatement::DiscretionaryPolicyStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -783,7 +787,7 @@ DiscretionaryPolicyStatement::checkPass(ModFileStructure &mod_file_struct, Warni
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -1042,7 +1046,7 @@ EstimationStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -1145,8 +1149,10 @@ DynareSensitivityStatement::writeJsonOutput(ostream &output) const
output << "}";
}
RplotStatement::RplotStatement(SymbolList symbol_list_arg) :
symbol_list{move(symbol_list_arg)}
RplotStatement::RplotStatement(SymbolList symbol_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -1155,7 +1161,7 @@ RplotStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidatio
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous});
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous}, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2024,7 +2030,7 @@ OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolid
try
{
symbol_list.checkPass(warnings, { SymbolType::parameter });
symbol_list.checkPass(warnings, { SymbolType::parameter }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2040,7 +2046,7 @@ OsrParamsStatement::writeOutput(ostream &output, const string &basename, bool mi
output << "M_.osr.param_names = cellstr(M_.osr.param_names);" << endl
<< "M_.osr.param_indices = zeros(length(M_.osr.param_names), 1);" << endl;
int i = 0;
vector<string> symbols = symbol_list.get_symbols();
vector<string> symbols = symbol_list.getSymbols();
for (auto &symbol : symbols)
output << "M_.osr.param_indices(" << ++i <<") = " << symbol_table.getTypeSpecificID(symbol) + 1 << ";" << endl;
}
@ -2109,10 +2115,11 @@ OsrParamsBoundsStatement::writeJsonOutput(ostream &output) const
<< "}";
}
OsrStatement::OsrStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OsrStatement::OsrStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -2139,7 +2146,7 @@ OsrStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2253,10 +2260,11 @@ OptimWeightsStatement::writeJsonOutput(ostream &output) const
<< "}";
}
DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg,
string filename_arg) :
DynaSaveStatement::DynaSaveStatement(SymbolList symbol_list_arg, string filename_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
filename{move(filename_arg)}
filename{move(filename_arg)},
symbol_table{symbol_table_arg}
{
}
@ -2265,7 +2273,7 @@ DynaSaveStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2295,10 +2303,11 @@ DynaSaveStatement::writeJsonOutput(ostream &output) const
output << "}";
}
DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg,
string filename_arg) :
DynaTypeStatement::DynaTypeStatement(SymbolList symbol_list_arg, string filename_arg,
const SymbolTable &symbol_table_arg) :
symbol_list(move(symbol_list_arg)),
filename(move(filename_arg))
filename(move(filename_arg)),
symbol_table{symbol_table_arg}
{
}
@ -2307,7 +2316,7 @@ DynaTypeStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolida
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::exogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2687,10 +2696,11 @@ MSSBVARComputeProbabilitiesStatement::writeJsonOutput(ostream &output) const
output << "}";
}
MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
MSSBVARIrfStatement::MSSBVARIrfStatement(SymbolList symbol_list_arg, OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -2714,7 +2724,7 @@ MSSBVARIrfStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsoli
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -2976,9 +2986,11 @@ WriteLatexSteadyStateModelStatement::writeJsonOutput(ostream &output) const
}
ShockDecompositionStatement::ShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -2991,7 +3003,7 @@ ShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, Warnin
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -3026,9 +3038,11 @@ ShockDecompositionStatement::writeJsonOutput(ostream &output) const
}
RealtimeShockDecompositionStatement::RealtimeShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -3041,7 +3055,7 @@ RealtimeShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -3076,9 +3090,11 @@ RealtimeShockDecompositionStatement::writeJsonOutput(ostream &output) const
}
PlotShockDecompositionStatement::PlotShockDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -3087,7 +3103,7 @@ PlotShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct, Wa
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue });
symbol_list.checkPass(warnings, { SymbolType::endogenous, SymbolType::epilogue }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -3123,9 +3139,11 @@ PlotShockDecompositionStatement::writeJsonOutput(ostream &output) const
}
InitialConditionDecompositionStatement::InitialConditionDecompositionStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg) :
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)}
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -3138,7 +3156,7 @@ InitialConditionDecompositionStatement::checkPass(ModFileStructure &mod_file_str
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -3173,8 +3191,10 @@ InitialConditionDecompositionStatement::writeJsonOutput(ostream &output) const
output << "}";
}
SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg)
: symbol_list{move(symbol_list_arg)}
SqueezeShockDecompositionStatement::SqueezeShockDecompositionStatement(SymbolList symbol_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -3184,7 +3204,7 @@ SqueezeShockDecompositionStatement::checkPass(ModFileStructure &mod_file_struct,
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -3251,9 +3271,12 @@ ConditionalForecastStatement::writeJsonOutput(ostream &output) const
output << "}";
}
PlotConditionalForecastStatement::PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg) :
PlotConditionalForecastStatement::PlotConditionalForecastStatement(int periods_arg,
SymbolList symbol_list_arg,
const SymbolTable &symbol_table_arg) :
periods{periods_arg},
symbol_list{move(symbol_list_arg)}
symbol_list{move(symbol_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -3263,7 +3286,7 @@ PlotConditionalForecastStatement::checkPass(ModFileStructure &mod_file_struct,
{
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{
@ -4826,8 +4849,11 @@ OptionsEqualStatement::writeOutput(ostream &output, const string &basename, bool
}
CalibSmootherStatement::CalibSmootherStatement(SymbolList symbol_list_arg,
OptionsList options_list_arg)
: symbol_list{move(symbol_list_arg)}, options_list{move(options_list_arg)}
OptionsList options_list_arg,
const SymbolTable &symbol_table_arg) :
symbol_list{move(symbol_list_arg)},
options_list{move(options_list_arg)},
symbol_table{symbol_table_arg}
{
}
@ -4837,7 +4863,7 @@ CalibSmootherStatement::checkPass(ModFileStructure &mod_file_struct, WarningCons
mod_file_struct.calib_smoother_present = true;
try
{
symbol_list.checkPass(warnings, { SymbolType::endogenous });
symbol_list.checkPass(warnings, { SymbolType::endogenous }, symbol_table);
}
catch (SymbolList::SymbolListException &e)
{

View File

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

View File

@ -203,12 +203,12 @@ class ParsingDriver;
%type <string> name_value_pair_with_suboptions name_value_pair_with_suboptions_list
%type <SymbolType> change_type_arg
%type <vector<string>> vec_str vec_str_1
%type <vector<string>> change_type_var_list
%type <vector<string>> symbol_list symbol_list_or_wildcard
%type <vector<int>> vec_int_elem vec_int_1 vec_int vec_int_number
%type <PriorDistributions> prior_pdf prior_distribution
%type <pair<expr_t,expr_t>> calibration_range
%type <pair<string,string>> named_var_elem subsamples_eq_opt integer_range_w_inf
%type <vector<pair<string,string>>> named_var named_var_1 tag_pair_list_for_selection
%type <pair<string,string>> partition_elem subsamples_eq_opt integer_range_w_inf
%type <vector<pair<string,string>>> partition partition_1 tag_pair_list_for_selection symbol_list_with_tex
%type <tuple<string,string,string,string>> prior_eq_opt options_eq_opt
%type <vector<pair<int, int>>> period_list
%type <vector<expr_t>> matched_moments_list value_list
@ -217,6 +217,7 @@ class ParsingDriver;
%type <map<string, expr_t>> occbin_constraints_regime_options_list
%type <pair<string, expr_t>> occbin_constraints_regime_option
%type <PacTargetKind> pac_target_kind
%type <vector<tuple<string, string, vector<pair<string, string>>>>> symbol_list_with_tex_and_partition
%%
%start statement_list;
@ -361,52 +362,143 @@ dsample : DSAMPLE INT_NUMBER ';'
{ driver.dsample($2, $3); }
;
rplot : RPLOT symbol_list ';' { driver.rplot(); };
symbol_list : symbol_list symbol
{
$$ = $1;
$$.push_back($2);
}
| symbol_list COMMA symbol
{
$$ = $1;
$$.push_back($3);
}
| symbol
{ $$ = { $1 }; }
;
trend_var : TREND_VAR '(' GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' trend_var_list ';'
{ driver.end_trend_var($6); }
symbol_list_or_wildcard : symbol_list
| ':'
{ $$ = { ":" }; }
;
symbol_list_with_tex : symbol_list_with_tex symbol
{
$$ = $1;
$$.emplace_back($2, "");
}
| symbol_list_with_tex COMMA symbol
{
$$ = $1;
$$.emplace_back($3, "");
}
| symbol
{ $$ = { { $1, "" }}; }
| symbol_list_with_tex symbol TEX_NAME
{
$$ = $1;
$$.emplace_back($2, $3);
}
| symbol_list_with_tex COMMA symbol TEX_NAME
{
$$ = $1;
$$.emplace_back($3, $4);
}
| symbol TEX_NAME
{ $$ = { { $1, $2 } }; }
;
partition_elem : symbol EQUAL QUOTED_STRING
{ $$ = { $1, $3 }; }
partition_1 : '(' partition_elem
{ $$ = { $2 }; }
| '(' COMMA partition_elem
{ $$ = { $3 }; }
| partition_1 partition_elem
{
$$ = $1;
$$.push_back($2);
}
| partition_1 COMMA partition_elem
{
$$ = $1;
$$.push_back($3);
}
;
partition : partition_1 ')'
| partition_1 COMMA ')'
;
trend_var_list : trend_var_list symbol
{ driver.declare_trend_var(false, $2); }
| trend_var_list COMMA symbol
{ driver.declare_trend_var(false, $3); }
| symbol
{ driver.declare_trend_var(false, $1); }
| trend_var_list symbol TEX_NAME
{ driver.declare_trend_var(false, $2, $3); }
| trend_var_list COMMA symbol TEX_NAME
{ driver.declare_trend_var(false, $3, $4); }
| symbol TEX_NAME
{ driver.declare_trend_var(false, $1, $2); }
;
symbol_list_with_tex_and_partition : symbol_list_with_tex_and_partition symbol
{
$$ = $1;
$$.emplace_back($2, "", vector<pair<string,string>>{});
}
| symbol_list_with_tex_and_partition COMMA symbol
{
$$ = $1;
$$.emplace_back($3, "", vector<pair<string,string>>{});
}
| symbol
{ $$ = { { $1, "", {} }}; }
| symbol_list_with_tex_and_partition symbol partition
{
$$ = $1;
$$.emplace_back($2, "", $3);
}
| symbol_list_with_tex_and_partition COMMA symbol partition
{
$$ = $1;
$$.emplace_back($3, "", $4);
}
| symbol partition
{ $$ = { { $1, "", $2 }}; }
| symbol_list_with_tex_and_partition symbol TEX_NAME
{
$$ = $1;
$$.emplace_back($2, $3, vector<pair<string,string>>{});
}
| symbol_list_with_tex_and_partition COMMA symbol TEX_NAME
{
$$ = $1;
$$.emplace_back($3, $4, vector<pair<string,string>>{});
}
| symbol TEX_NAME
{ $$ = { { $1, $2, {} }}; }
| symbol_list_with_tex_and_partition symbol TEX_NAME partition
{
$$ = $1;
$$.emplace_back($2, $3, $4);
}
| symbol_list_with_tex_and_partition COMMA symbol TEX_NAME partition
{
$$ = $1;
$$.emplace_back($3, $4, $5);
}
| symbol TEX_NAME partition
{ $$ = { { $1, $2, $3 }}; }
;
log_trend_var : LOG_TREND_VAR '(' LOG_GROWTH_FACTOR EQUAL { driver.begin_trend(); } hand_side ')' log_trend_var_list ';'
{ driver.end_trend_var($6); }
rplot : RPLOT symbol_list ';' { driver.rplot($2); };
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
{ driver.declare_trend_var(true, $2); }
| log_trend_var_list COMMA symbol
{ driver.declare_trend_var(true, $3); }
| symbol
{ driver.declare_trend_var(true, $1); }
| log_trend_var_list symbol TEX_NAME
{ driver.declare_trend_var(true, $2, $3); }
| log_trend_var_list COMMA symbol TEX_NAME
{ driver.declare_trend_var(true, $3, $4); }
| symbol TEX_NAME
{ driver.declare_trend_var(true, $1, $2); }
;
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 : VAR symbol_list_with_tex_and_partition ';'
{ driver.var($2); }
| VAR '(' DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
{ driver.end_nonstationary_var(false, $6, $8); }
| VAR '(' LOG_DEFLATOR EQUAL { driver.begin_trend(); } hand_side ')' symbol_list_with_tex_and_partition ';'
{ driver.end_nonstationary_var(true, $6, $8); }
;
var_remove : VAR_REMOVE symbol_list ';' { driver.var_remove(); };
var_remove : VAR_REMOVE symbol_list ';' { driver.var_remove($2); };
var_model : VAR_MODEL '(' var_model_options_list ')' ';' { driver.var_model(); }
;
@ -476,194 +568,27 @@ var_expectation_model_option : VARIABLE EQUAL symbol
{ driver.option_num("time_shift", $3); }
;
nonstationary_var_list : nonstationary_var_list symbol
{ driver.declare_nonstationary_var($2); }
| nonstationary_var_list COMMA symbol
{ driver.declare_nonstationary_var($3); }
| symbol
{ driver.declare_nonstationary_var($1); }
| nonstationary_var_list symbol named_var
{ driver.declare_nonstationary_var($2, "", $3); }
| nonstationary_var_list COMMA symbol named_var
{ driver.declare_nonstationary_var($3, "", $4); }
| symbol named_var
{ driver.declare_nonstationary_var($1, "", $2); }
| nonstationary_var_list symbol TEX_NAME
{ driver.declare_nonstationary_var($2, $3); }
| nonstationary_var_list COMMA symbol TEX_NAME
{ driver.declare_nonstationary_var($3, $4); }
| symbol TEX_NAME
{ driver.declare_nonstationary_var($1, $2); }
| nonstationary_var_list symbol TEX_NAME named_var
{ driver.declare_nonstationary_var($2, $3, $4); }
| nonstationary_var_list COMMA symbol TEX_NAME named_var
{ driver.declare_nonstationary_var($3, $4, $5); }
| symbol TEX_NAME named_var
{ driver.declare_nonstationary_var($1, $2, $3); }
;
varexo : VAREXO varexo_list ';'
varexo : VAREXO symbol_list_with_tex_and_partition ';'
{ driver.varexo($2); }
;
varexo_det : VAREXO_DET varexo_det_list ';';
predetermined_variables : PREDETERMINED_VARIABLES predetermined_variables_list ';';
parameters : PARAMETERS parameter_list ';';
varexo_det : VAREXO_DET symbol_list_with_tex_and_partition ';'
{ driver.varexo_det($2); }
;
model_local_variable : MODEL_LOCAL_VARIABLE model_local_variable_list ';';
predetermined_variables : PREDETERMINED_VARIABLES symbol_list ';'
{ driver.predetermined_variables($2); }
;
named_var_elem : symbol EQUAL QUOTED_STRING
{ $$ = { $1, $3 }; }
parameters : PARAMETERS symbol_list_with_tex_and_partition ';'
{ driver.parameters($2); }
;
named_var_1 : '(' named_var_elem
{ $$ = { $2 }; }
| '(' COMMA named_var_elem
{ $$ = { $3 }; }
| named_var_1 named_var_elem
{
$$ = $1;
$$.push_back($2);
}
| named_var_1 COMMA named_var_elem
{
$$ = $1;
$$.push_back($3);
}
;
model_local_variable : MODEL_LOCAL_VARIABLE symbol_list_with_tex ';'
{ driver.model_local_variable($2); }
;
named_var : named_var_1 ')'
| named_var_1 COMMA ')'
;
var_list : var_list symbol
{ driver.declare_endogenous($2); }
| var_list COMMA symbol
{ driver.declare_endogenous($3); }
| symbol
{ driver.declare_endogenous($1); }
| var_list symbol named_var
{ driver.declare_endogenous($2, "", $3); }
| var_list COMMA symbol named_var
{ driver.declare_endogenous($3, "", $4); }
| symbol named_var
{ driver.declare_endogenous($1, "", $2); }
| var_list symbol TEX_NAME
{ driver.declare_endogenous($2, $3); }
| var_list COMMA symbol TEX_NAME
{ driver.declare_endogenous($3, $4); }
| symbol TEX_NAME
{ driver.declare_endogenous($1, $2); }
| var_list symbol TEX_NAME named_var
{ driver.declare_endogenous($2, $3, $4); }
| var_list COMMA symbol TEX_NAME named_var
{ driver.declare_endogenous($3, $4, $5); }
| symbol TEX_NAME named_var
{ driver.declare_endogenous($1, $2, $3); }
;
varexo_list : varexo_list symbol
{ driver.declare_exogenous($2); }
| varexo_list COMMA symbol
{ driver.declare_exogenous($3); }
| symbol
{ driver.declare_exogenous($1); }
| varexo_list symbol named_var
{ driver.declare_exogenous($2, "", $3); }
| varexo_list COMMA symbol named_var
{ driver.declare_exogenous($3, "", $4); }
| symbol named_var
{ driver.declare_exogenous($1, "", $2); }
| varexo_list symbol TEX_NAME
{ driver.declare_exogenous($2, $3); }
| varexo_list COMMA symbol TEX_NAME
{ driver.declare_exogenous($3, $4); }
| symbol TEX_NAME
{ driver.declare_exogenous($1, $2); }
| varexo_list symbol TEX_NAME named_var
{ driver.declare_exogenous($2, $3, $4); }
| varexo_list COMMA symbol TEX_NAME named_var
{ driver.declare_exogenous($3, $4, $5); }
| symbol TEX_NAME named_var
{ driver.declare_exogenous($1, $2, $3); }
;
varexo_det_list : varexo_det_list symbol
{ driver.declare_exogenous_det($2); }
| varexo_det_list COMMA symbol
{ driver.declare_exogenous_det($3); }
| symbol
{ driver.declare_exogenous_det($1); }
| varexo_det_list symbol named_var
{ driver.declare_exogenous_det($2, "", $3); }
| varexo_det_list COMMA symbol named_var
{ driver.declare_exogenous_det($3, "", $4); }
| symbol named_var
{ driver.declare_exogenous_det($1, "", $2); }
| varexo_det_list symbol TEX_NAME
{ driver.declare_exogenous_det($2, $3); }
| varexo_det_list COMMA symbol TEX_NAME
{ driver.declare_exogenous_det($3, $4); }
| symbol TEX_NAME
{ driver.declare_exogenous_det($1, $2); }
| varexo_det_list symbol TEX_NAME named_var
{ driver.declare_exogenous_det($2, $3, $4); }
| varexo_det_list COMMA symbol TEX_NAME named_var
{ driver.declare_exogenous_det($3, $4, $5); }
| symbol TEX_NAME named_var
{ driver.declare_exogenous_det($1, $2, $3); }
;
parameter_list : parameter_list symbol
{ driver.declare_parameter($2); }
| parameter_list COMMA symbol
{ driver.declare_parameter($3); }
| symbol
{ driver.declare_parameter($1); }
| parameter_list symbol named_var
{ driver.declare_parameter($2, "", $3); }
| parameter_list COMMA symbol named_var
{ driver.declare_parameter($3, "", $4); }
| symbol named_var
{ driver.declare_parameter($1, "", $2); }
| parameter_list symbol TEX_NAME
{ driver.declare_parameter($2, $3); }
| parameter_list COMMA symbol TEX_NAME
{ driver.declare_parameter($3, $4); }
| symbol TEX_NAME
{ driver.declare_parameter($1, $2); }
| parameter_list symbol TEX_NAME named_var
{ driver.declare_parameter($2, $3, $4); }
| parameter_list COMMA symbol TEX_NAME named_var
{ driver.declare_parameter($3, $4, $5); }
| symbol TEX_NAME named_var
{ driver.declare_parameter($1, $2, $3); }
;
predetermined_variables_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 ';'
change_type : CHANGE_TYPE '(' change_type_arg ')' symbol_list ';'
{ driver.change_type($3, $5); }
;
@ -677,20 +602,6 @@ change_type_arg : PARAMETERS
{ $$ = SymbolType::exogenousDet; }
;
change_type_var_list : symbol
{ $$ = { $1 }; }
| change_type_var_list symbol
{
$$ = $1;
$$.push_back($2);
}
| change_type_var_list COMMA symbol
{
$$ = $1;
$$.push_back($3);
}
;
periods : PERIODS INT_NUMBER ';'
{ driver.periods($2); }
| PERIODS EQUAL INT_NUMBER ';'
@ -1013,7 +924,7 @@ model_option : BLOCK { driver.block(); }
| USE_DLL { driver.use_dll(); }
| NO_STATIC { driver.no_static();}
| DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); }
| DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); }
| DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some($4); }
| o_linear
| PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')'
| BALANCED_GROWTH_TEST_TOL EQUAL non_negative_number { driver.balanced_growth_test_tol($3); }
@ -1278,18 +1189,12 @@ svar_identification_elem : EXCLUSION LAG INT_NUMBER ';' svar_equation_list
{ driver.add_lower_cholesky(); }
;
svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA svar_var_list ';'
{ driver.add_restriction_in_equation($3); }
| EQUATION INT_NUMBER COMMA svar_var_list ';'
{ driver.add_restriction_in_equation($2); }
svar_equation_list : svar_equation_list EQUATION INT_NUMBER COMMA symbol_list ';'
{ driver.add_restriction_in_equation($3, $5); }
| EQUATION INT_NUMBER COMMA symbol_list ';'
{ driver.add_restriction_in_equation($2, $4); }
;
svar_var_list : svar_var_list COMMA symbol
{ driver.add_in_svar_restriction_symbols($3); }
| symbol
{ driver.add_in_svar_restriction_symbols($1); }
;
restriction_expression : expression {driver.check_restriction_expression_constant($1);}
| restriction_expression_1
;
@ -1676,13 +1581,13 @@ external_function_options : o_ext_func_name
;
stoch_simul : STOCH_SIMUL ';'
{ driver.stoch_simul(); }
{ driver.stoch_simul({}); }
| STOCH_SIMUL '(' stoch_simul_options_list ')' ';'
{ driver.stoch_simul(); }
{ driver.stoch_simul({}); }
| STOCH_SIMUL symbol_list ';'
{ driver.stoch_simul(); }
{ driver.stoch_simul($2); }
| STOCH_SIMUL '(' stoch_simul_options_list ')' symbol_list ';'
{ driver.stoch_simul(); }
{ driver.stoch_simul($5); }
;
stoch_simul_options_list : stoch_simul_options_list COMMA stoch_simul_options
@ -1749,19 +1654,6 @@ stoch_simul_options : stoch_simul_primary_options
| o_one_sided_hp_filter
;
symbol_list : symbol_list symbol
{ driver.add_in_symbol_list($2); }
| symbol_list COMMA symbol
{ driver.add_in_symbol_list($3); }
| symbol
{ driver.add_in_symbol_list($1); }
;
symbol_list_ext : symbol_list
| ':'
{ driver.add_in_symbol_list(":"); }
;
signed_integer : PLUS INT_NUMBER
{ $$ = $2; }
| MINUS INT_NUMBER
@ -2187,13 +2079,13 @@ options_eq_opt : symbol '.' OPTIONS
;
estimation : ESTIMATION ';'
{ driver.run_estimation(); }
{ driver.run_estimation({}); }
| ESTIMATION '(' estimation_options_list ')' ';'
{ driver.run_estimation(); }
{ driver.run_estimation({}); }
| ESTIMATION symbol_list ';'
{ driver.run_estimation(); }
{ driver.run_estimation($2); }
| ESTIMATION '(' estimation_options_list ')' symbol_list ';'
{ driver.run_estimation(); }
{ driver.run_estimation($5); }
;
estimation_options_list : estimation_options_list COMMA estimation_options
@ -2426,7 +2318,7 @@ optim_weights_list : optim_weights_list symbol expression ';'
{ driver.set_optim_weights($1, $3, $4); }
;
osr_params : OSR_PARAMS symbol_list ';' { driver.set_osr_params(); };
osr_params : OSR_PARAMS symbol_list ';' { driver.set_osr_params($2); };
osr_options_list : osr_options_list COMMA osr_options
@ -2443,25 +2335,25 @@ osr_options : stoch_simul_primary_options
;
osr : OSR ';'
{ driver.run_osr(); }
{ driver.run_osr({}); }
| OSR '(' osr_options_list ')' ';'
{ driver.run_osr(); }
{ driver.run_osr({}); }
| OSR symbol_list ';'
{ driver.run_osr(); }
{ driver.run_osr($2); }
| OSR '(' osr_options_list ')' symbol_list ';'
{driver.run_osr(); }
{driver.run_osr($5); }
;
dynatype : DYNATYPE '(' filename ')' ';'
{ driver.run_dynatype($3); }
{ driver.run_dynatype($3, {}); }
| DYNATYPE '(' filename ')' symbol_list ';'
{ driver.run_dynatype($3); }
{ driver.run_dynatype($3, $5); }
;
dynasave : DYNASAVE '(' filename ')' ';'
{ driver.run_dynasave($3); }
{ driver.run_dynasave($3, {}); }
| DYNASAVE '(' filename ')' symbol_list ';'
{ driver.run_dynasave($3); }
{ driver.run_dynasave($3, $5); }
;
load_params_and_steady_state : LOAD_PARAMS_AND_STEADY_STATE '(' filename ')' ';'
@ -2569,13 +2461,13 @@ ramsey_model : RAMSEY_MODEL ';'
;
ramsey_policy : RAMSEY_POLICY ';'
{ driver.ramsey_policy(); }
{ driver.ramsey_policy({}); }
| RAMSEY_POLICY '(' ramsey_policy_options_list ')' ';'
{ driver.ramsey_policy(); }
{ driver.ramsey_policy({}); }
| RAMSEY_POLICY symbol_list ';'
{ driver.ramsey_policy(); }
{ driver.ramsey_policy($2); }
| RAMSEY_POLICY '(' ramsey_policy_options_list ')' symbol_list ';'
{ driver.ramsey_policy(); }
{ driver.ramsey_policy($5); }
;
ramsey_constraints : RAMSEY_CONSTRAINTS ';' ramsey_constraints_list END ';'
@ -2648,8 +2540,7 @@ occbin_solver : OCCBIN_SOLVER ';'
{ driver.occbin_solver(); }
| OCCBIN_SOLVER '(' occbin_solver_options_list ')' ';'
{ driver.occbin_solver(); }
| OCCBIN_SOLVER '(' occbin_solver_options_list ')' symbol_list ';'
{ driver.occbin_solver(); }
;
occbin_solver_options_list : occbin_solver_option COMMA occbin_solver_options_list
| occbin_solver_option
@ -2679,13 +2570,13 @@ occbin_write_regimes_option : o_occbin_write_regimes_periods
;
occbin_graph : OCCBIN_GRAPH ';'
{ driver.occbin_graph(); }
{ driver.occbin_graph({}); }
| OCCBIN_GRAPH '(' occbin_graph_options_list ')' ';'
{ driver.occbin_graph(); }
{ driver.occbin_graph({}); }
| OCCBIN_GRAPH symbol_list ';'
{ driver.occbin_graph(); }
{ driver.occbin_graph($2); }
| OCCBIN_GRAPH '(' occbin_graph_options_list ')' symbol_list ';'
{ driver.occbin_graph(); }
{ driver.occbin_graph($5); }
;
occbin_graph_options_list : occbin_graph_option COMMA occbin_graph_options_list
@ -2695,13 +2586,13 @@ occbin_graph_options_list : occbin_graph_option COMMA occbin_graph_options_list
occbin_graph_option : o_occbin_graph_noconstant ;
discretionary_policy : DISCRETIONARY_POLICY ';'
{ driver.discretionary_policy(); }
{ driver.discretionary_policy({}); }
| DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' ';'
{ driver.discretionary_policy(); }
{ driver.discretionary_policy({}); }
| DISCRETIONARY_POLICY symbol_list ';'
{ driver.discretionary_policy(); }
{ driver.discretionary_policy($2); }
| DISCRETIONARY_POLICY '(' discretionary_policy_options_list ')' symbol_list ';'
{ driver.discretionary_policy(); }
{ driver.discretionary_policy($5); }
;
discretionary_policy_options_list : discretionary_policy_options_list COMMA discretionary_policy_options
@ -2754,49 +2645,49 @@ write_latex_steady_state_model : WRITE_LATEX_STEADY_STATE_MODEL ';'
;
shock_decomposition : SHOCK_DECOMPOSITION ';'
{driver.shock_decomposition(); }
{ driver.shock_decomposition({}); }
| SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' ';'
{ driver.shock_decomposition(); }
{ driver.shock_decomposition({}); }
| SHOCK_DECOMPOSITION symbol_list ';'
{ driver.shock_decomposition(); }
{ driver.shock_decomposition($2); }
| SHOCK_DECOMPOSITION '(' shock_decomposition_options_list ')' symbol_list ';'
{ driver.shock_decomposition(); }
{ driver.shock_decomposition($5); }
;
realtime_shock_decomposition : REALTIME_SHOCK_DECOMPOSITION ';'
{driver.realtime_shock_decomposition(); }
{ driver.realtime_shock_decomposition({}); }
| REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' ';'
{ driver.realtime_shock_decomposition(); }
{ driver.realtime_shock_decomposition({}); }
| REALTIME_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.realtime_shock_decomposition(); }
{ driver.realtime_shock_decomposition($2); }
| REALTIME_SHOCK_DECOMPOSITION '(' realtime_shock_decomposition_options_list ')' symbol_list ';'
{ driver.realtime_shock_decomposition(); }
{ driver.realtime_shock_decomposition($5); }
;
plot_shock_decomposition : PLOT_SHOCK_DECOMPOSITION ';'
{driver.plot_shock_decomposition(); }
{ driver.plot_shock_decomposition({}); }
| PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' ';'
{ driver.plot_shock_decomposition(); }
{ driver.plot_shock_decomposition({}); }
| PLOT_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.plot_shock_decomposition(); }
{ driver.plot_shock_decomposition($2); }
| PLOT_SHOCK_DECOMPOSITION '(' plot_shock_decomposition_options_list ')' symbol_list ';'
{ driver.plot_shock_decomposition(); }
{ driver.plot_shock_decomposition($5); }
;
initial_condition_decomposition : INITIAL_CONDITION_DECOMPOSITION ';'
{driver.initial_condition_decomposition(); }
{ driver.initial_condition_decomposition({}); }
| INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' ';'
{ driver.initial_condition_decomposition(); }
{ driver.initial_condition_decomposition({}); }
| INITIAL_CONDITION_DECOMPOSITION symbol_list ';'
{ driver.initial_condition_decomposition(); }
{ driver.initial_condition_decomposition($2); }
| INITIAL_CONDITION_DECOMPOSITION '(' initial_condition_decomposition_options_list ')' symbol_list ';'
{ driver.initial_condition_decomposition(); }
{ driver.initial_condition_decomposition($5); }
;
squeeze_shock_decomposition : SQUEEZE_SHOCK_DECOMPOSITION ';'
{ driver.squeeze_shock_decomposition(); }
{ driver.squeeze_shock_decomposition({}); }
| SQUEEZE_SHOCK_DECOMPOSITION symbol_list ';'
{ driver.squeeze_shock_decomposition(); }
{ driver.squeeze_shock_decomposition($2); }
;
bvar_prior_option : o_bvar_prior_tau
@ -2979,13 +2870,13 @@ ms_irf_options_list : ms_irf_option COMMA ms_irf_options_list
;
ms_irf : MS_IRF ';'
{ driver.ms_irf(); }
{ driver.ms_irf({}); }
| MS_IRF '(' ms_irf_options_list ')' ';'
{ driver.ms_irf(); }
{ driver.ms_irf({}); }
| MS_IRF symbol_list ';'
{ driver.ms_irf(); }
{ driver.ms_irf($2); }
| MS_IRF '(' ms_irf_options_list ')' symbol_list ';'
{ driver.ms_irf(); }
{ driver.ms_irf($5); }
;
ms_compute_probabilities_option : o_output_file_tag
@ -3253,11 +3144,15 @@ homotopy_item : symbol COMMA expression COMMA expression ';'
{ driver.homotopy_val($1, nullptr, $3);}
;
forecast: FORECAST ';' {driver.forecast();}
| FORECAST '(' forecast_options ')' ';' {driver.forecast();}
| FORECAST symbol_list ';' {driver.forecast();}
| FORECAST '(' forecast_options ')' symbol_list ';' {driver.forecast();}
;
forecast: FORECAST ';'
{ driver.forecast({}); }
| FORECAST '(' forecast_options ')' ';'
{ driver.forecast({}); }
| FORECAST symbol_list ';'
{ driver.forecast($2); }
| FORECAST '(' forecast_options ')' symbol_list ';'
{ driver.forecast($5); }
;
forecast_options: forecast_option
| forecast_options COMMA forecast_option
@ -3286,9 +3181,9 @@ conditional_forecast_option : o_periods
;
plot_conditional_forecast : PLOT_CONDITIONAL_FORECAST symbol_list ';'
{ driver.plot_conditional_forecast(); }
{ driver.plot_conditional_forecast("", $2); }
| PLOT_CONDITIONAL_FORECAST '(' PERIODS EQUAL INT_NUMBER ')' symbol_list ';'
{ driver.plot_conditional_forecast($5); }
{ driver.plot_conditional_forecast($5, $7); }
;
conditional_forecast_paths : CONDITIONAL_FORECAST_PATHS ';' conditional_forecast_paths_shock_list END ';'
@ -3314,17 +3209,17 @@ steady_state_equation_list : steady_state_equation_list steady_state_equation
steady_state_equation : symbol EQUAL expression ';'
{ driver.add_steady_state_model_equal($1, $3); }
| '[' symbol_list ']' EQUAL expression ';'
{ driver.add_steady_state_model_equal_multiple($5); }
{ driver.add_steady_state_model_equal_multiple($2, $5); }
;
calib_smoother : CALIB_SMOOTHER ';'
{ driver.calib_smoother(); }
{ driver.calib_smoother({}); }
| CALIB_SMOOTHER '(' calib_smoother_options_list ')' ';'
{ driver.calib_smoother(); }
{ driver.calib_smoother({}); }
| CALIB_SMOOTHER symbol_list ';'
{ driver.calib_smoother(); }
{ driver.calib_smoother($2); }
| CALIB_SMOOTHER '(' calib_smoother_options_list ')' symbol_list ';'
{ driver.calib_smoother(); }
{ driver.calib_smoother($5); }
;
calib_smoother_options_list : calib_smoother_option COMMA calib_smoother_options_list
@ -3520,7 +3415,7 @@ o_nocorr : NOCORR { driver.option_num("nocorr", "true"); };
o_nofunctions : NOFUNCTIONS { driver.option_num("nofunctions", "true"); };
o_nomoments : NOMOMENTS { driver.option_num("nomoments", "true"); };
o_irf : IRF EQUAL INT_NUMBER { driver.option_num("irf", $3); };
o_irf_shocks : IRF_SHOCKS EQUAL '(' symbol_list ')' { driver.option_symbol_list("irf_shocks"); };
o_irf_shocks : IRF_SHOCKS EQUAL '(' symbol_list ')' { driver.option_symbol_list("irf_shocks", $4); };
o_hp_filter : HP_FILTER EQUAL non_negative_number { driver.option_num("hp_filter", $3); };
o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER {
driver.warning("The 'hp_ngrid' option is deprecated. It has been superseded by the 'filtered_theoretical_moments_grid' option.");
@ -3872,12 +3767,12 @@ o_gsa_logtrans_redform : LOGTRANS_REDFORM EQUAL INT_NUMBER { driver.option_num("
o_gsa_threshold_redform : THRESHOLD_REDFORM EQUAL vec_value_w_inf { driver.option_num("threshold_redform",$3); };
o_gsa_ksstat_redform : KSSTAT_REDFORM EQUAL non_negative_number { driver.option_num("ksstat_redform", $3); };
o_gsa_alpha2_redform : ALPHA2_REDFORM EQUAL non_negative_number { driver.option_num("alpha2_redform", $3); };
o_gsa_namendo : NAMENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namendo"); };
o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namlagendo"); };
o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("namexo"); };
o_gsa_namendo : NAMENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namendo", $4); };
o_gsa_namlagendo : NAMLAGENDO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namlagendo", $4); };
o_gsa_namexo : NAMEXO EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("namexo", $4); };
o_gsa_rmse : RMSE EQUAL INT_NUMBER { driver.option_num("rmse", $3); };
o_gsa_lik_only : LIK_ONLY EQUAL INT_NUMBER { driver.option_num("lik_only", $3); };
o_gsa_var_rmse : VAR_RMSE EQUAL '(' symbol_list_ext ')' { driver.option_symbol_list("var_rmse"); };
o_gsa_var_rmse : VAR_RMSE EQUAL '(' symbol_list_or_wildcard ')' { driver.option_symbol_list("var_rmse", $4); };
o_gsa_pfilt_rmse : PFILT_RMSE EQUAL non_negative_number { driver.option_num("pfilt_rmse", $3); };
o_gsa_istart_rmse : ISTART_RMSE EQUAL INT_NUMBER { driver.option_num("istart_rmse", $3); };
o_gsa_alpha_rmse : ALPHA_RMSE EQUAL non_negative_number { driver.option_num("alpha_rmse", $3); };
@ -3901,7 +3796,7 @@ o_homotopy_steps : HOMOTOPY_STEPS EQUAL INT_NUMBER {driver.option_num("homotopy_
o_homotopy_force_continue: HOMOTOPY_FORCE_CONTINUE EQUAL INT_NUMBER { driver.option_num("homotopy_force_continue",$3); };
o_nocheck : NOCHECK {driver.option_num("steadystate.nocheck","true"); };
o_controlled_varexo : CONTROLLED_VAREXO EQUAL '(' symbol_list ')' { driver.option_symbol_list("controlled_varexo"); };
o_controlled_varexo : CONTROLLED_VAREXO EQUAL '(' symbol_list ')' { driver.option_symbol_list("controlled_varexo", $4); };
o_parameter_set : PARAMETER_SET EQUAL PRIOR_MODE
{ driver.option_str("parameter_set", "prior_mode"); }
| PARAMETER_SET EQUAL PRIOR_MEAN
@ -3934,7 +3829,7 @@ o_final_year : FINAL_YEAR EQUAL INT_NUMBER {driver.option_num("ms.final_year",$3
o_final_subperiod : FINAL_SUBPERIOD EQUAL INT_NUMBER {driver.option_num("ms.final_subperiod",$3); };
o_data : DATA EQUAL filename { driver.option_str("ms.data", $3); };
o_vlist : VLIST EQUAL INT_NUMBER {driver.option_num("ms.vlist",$3); };
o_vlistlog : VLISTLOG EQUAL '(' symbol_list ')' {driver.option_symbol_list("ms.vlistlog"); };
o_vlistlog : VLISTLOG EQUAL '(' symbol_list ')' {driver.option_symbol_list("ms.vlistlog", $4); };
o_vlistper : VLISTPER EQUAL INT_NUMBER {driver.option_num("ms.vlistper",$3); };
o_restriction_fname : RESTRICTION_FNAME EQUAL NAME
{
@ -4005,7 +3900,7 @@ o_duration : DURATION EQUAL non_negative_number
;
o_number_of_regimes : NUMBER_OF_REGIMES EQUAL INT_NUMBER { driver.option_num("ms.number_of_regimes",$3); };
o_number_of_lags : NUMBER_OF_LAGS EQUAL INT_NUMBER { driver.option_num("ms.number_of_lags",$3); };
o_parameters : PARAMETERS EQUAL '[' symbol_list ']' { driver.option_symbol_list("ms.parameters"); };
o_parameters : PARAMETERS EQUAL '[' symbol_list ']' { driver.option_symbol_list("ms.parameters", $4); };
o_coefficients : COEFFICIENTS { driver.option_str("ms.coefficients","svar_coefficients"); };
o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); };
o_equations : EQUATIONS EQUAL vec_int
@ -4014,7 +3909,7 @@ o_equations : EQUATIONS EQUAL vec_int
{ driver.option_vec_int("ms.equations",$3); }
;
o_silent_optimizer : SILENT_OPTIMIZER { driver.option_num("silent_optimizer", "true"); };
o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments"); };
o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments", $4); };
o_ext_func_name : EXT_FUNC_NAME EQUAL namespace_qualified_filename { driver.external_function_option("name", $3); };
o_ext_func_nargs : EXT_FUNC_NARGS EQUAL INT_NUMBER { driver.external_function_option("nargs",$3); };
@ -4130,10 +4025,10 @@ o_consider_only_observed : CONSIDER_ONLY_OBSERVED { driver.option_str("endo_vars
o_no_homotopy : NO_HOMOTOPY { driver.option_num("no_homotopy", "true"); };
o_infile : INFILE EQUAL filename { driver.option_str("infile", $3); };
o_invars : INVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("invars"); };
o_invars : INVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("invars", $4); };
o_period : PERIOD EQUAL INT_NUMBER { driver.option_num("period", $3); };
o_outfile : OUTFILE EQUAL filename { driver.option_str("outfile", $3); };
o_outvars : OUTVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("outvars"); };
o_outvars : OUTVARS EQUAL '(' symbol_list ')' { driver.option_symbol_list("outvars", $4); };
o_lmmcp : LMMCP {driver.option_num("lmmcp.status", "true"); };
o_function : FUNCTION EQUAL filename { driver.option_str("function", $3); };
o_sampling_draws : SAMPLING_DRAWS EQUAL INT_NUMBER { driver.option_num("sampling_draws",$3); };

View File

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

View File

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

View File

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

View File

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

View File

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