preprocessor: add eqtags option to var_model
parent
3da0186774
commit
11ffe053b2
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2017 Dynare Team
|
||||
* Copyright (C) 2003-2018 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -50,7 +50,8 @@ class ParsingDriver;
|
|||
string *string_val;
|
||||
expr_t node_val;
|
||||
SymbolType symbol_type_val;
|
||||
vector<string *> *vector_string_val;
|
||||
vector<string> *vector_string_val;
|
||||
vector<string *> *vector_string_p_val;
|
||||
vector<int> *vector_int_val;
|
||||
pair<string *, string *> *string_pair_val;
|
||||
vector<pair<string *, string *> *> *vector_string_pair_val;
|
||||
|
@ -176,10 +177,10 @@ class ParsingDriver;
|
|||
%token NUMBER_OF_POSTERIOR_DRAWS_AFTER_PERTURBATION MAX_NUMBER_OF_STAGES
|
||||
%token RANDOM_FUNCTION_CONVERGENCE_CRITERION RANDOM_PARAMETER_CONVERGENCE_CRITERION
|
||||
%token CENTERED_MOMENTS AUTOLAG RECURSIVE_ORDER_ESTIMATION BARTLETT_KERNEL_LAG WEIGHTING_MATRIX PENALIZED_ESTIMATOR VERBOSE
|
||||
%token SIMULATION_MULTIPLE SEED BOUNDED_SHOCK_SUPPORT
|
||||
%token SIMULATION_MULTIPLE SEED BOUNDED_SHOCK_SUPPORT EQTAGS
|
||||
%token ANALYTICAL_GIRF IRF_IN_PERCENT EMAS_GIRF EMAS_DROP EMAS_TOLF EMAS_MAX_ITER
|
||||
|
||||
%token <vector_string_val> SYMBOL_VEC
|
||||
%token <vector_string_p_val> SYMBOL_VEC
|
||||
|
||||
%type <node_val> expression expression_or_empty
|
||||
%type <node_val> equation hand_side
|
||||
|
@ -191,7 +192,8 @@ class ParsingDriver;
|
|||
%type <string_pair_val> named_var_elem
|
||||
%type <vector_string_pair_val> named_var named_var_1
|
||||
%type <symbol_type_val> change_type_arg
|
||||
%type <vector_string_val> change_type_var_list subsamples_eq_opt prior_eq_opt options_eq_opt calibration_range
|
||||
%type <vector_string_val> vec_str vec_str_1
|
||||
%type <vector_string_p_val> change_type_var_list subsamples_eq_opt prior_eq_opt options_eq_opt calibration_range
|
||||
%type <vector_int_val> vec_int_elem vec_int_1 vec_int vec_int_number
|
||||
%type <prior_distributions_val> prior_pdf prior_distribution
|
||||
%%
|
||||
|
@ -376,6 +378,7 @@ var_model_options_list : var_model_options_list COMMA var_model_options
|
|||
|
||||
var_model_options : o_var_name
|
||||
| o_var_order
|
||||
| o_var_eq_tags
|
||||
;
|
||||
|
||||
restrictions : RESTRICTIONS '(' symbol ')' ';' { driver.begin_VAR_restrictions(); }
|
||||
|
@ -3177,6 +3180,7 @@ o_series : SERIES EQUAL symbol { driver.option_str("series", $3); };
|
|||
o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
|
||||
o_var_datafile : DATAFILE EQUAL filename { driver.option_str("var_estimation.datafile", $3); };
|
||||
o_var_model_name : symbol { driver.option_str("var_estimation.model_name", $1); };
|
||||
o_var_eq_tags : EQTAGS EQUAL vec_str { driver.option_vec_str("var.eqtags", $3); }
|
||||
o_dirname : DIRNAME EQUAL filename { driver.option_str("dirname", $3); };
|
||||
o_huge_number : HUGE_NUMBER EQUAL non_negative_number { driver.option_num("huge_number", $3); };
|
||||
o_nobs : NOBS EQUAL vec_int
|
||||
|
@ -3820,6 +3824,22 @@ vec_int : vec_int_1 ']'
|
|||
{ $$ = $1; }
|
||||
;
|
||||
|
||||
vec_str_1 : '[' QUOTED_STRING
|
||||
{ $$ = new vector<string>(); $$->push_back(*$2); delete $2; }
|
||||
| '[' COMMA QUOTED_STRING
|
||||
{ $$ = new vector<string>(); $$->push_back(*$3); delete $3; }
|
||||
| vec_str_1 QUOTED_STRING
|
||||
{ $$->push_back(*$2); delete $2; }
|
||||
| vec_str_1 COMMA QUOTED_STRING
|
||||
{ $$->push_back(*$3); delete $3; }
|
||||
;
|
||||
|
||||
vec_str : vec_str_1 ']'
|
||||
{ $$ = $1; }
|
||||
| vec_str_1 COMMA ']'
|
||||
{ $$ = $1; }
|
||||
;
|
||||
|
||||
vec_value_1 : '[' signed_number { $2->insert(0,"["); $$ = $2; }
|
||||
| '[' COMMA signed_number { $3->insert(0,"["); $$ = $3; }
|
||||
| vec_value_1 signed_number
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2017 Dynare Team
|
||||
* Copyright (C) 2003-2018 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -481,6 +481,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
|
|||
return token::ABAND;
|
||||
}
|
||||
<DYNARE_STATEMENT>write_equation_tags {return token::WRITE_EQUATION_TAGS;}
|
||||
<DYNARE_STATEMENT>eqtags {return token::EQTAGS;}
|
||||
<DYNARE_STATEMENT>indxap {return token::INDXAP;}
|
||||
<DYNARE_STATEMENT>apband {return token::APBAND;}
|
||||
<DYNARE_STATEMENT>indximf {return token::INDXIMF;}
|
||||
|
@ -960,19 +961,20 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
|
|||
yytextcpy.erase(remove(yytextcpy.begin(), yytextcpy.end(), ' '), yytextcpy.end());
|
||||
istringstream ss(yytextcpy);
|
||||
string token;
|
||||
yylval->vector_string_val = new vector<string *>;
|
||||
yylval->vector_string_val = new vector<string>;
|
||||
yylval->vector_string_p_val = new vector<string *>;
|
||||
|
||||
bool dynare_statement = true;
|
||||
|
||||
while(getline(ss, token, ','))
|
||||
if (driver.symbol_exists_and_is_not_modfile_local_or_external_function(token.c_str()))
|
||||
yylval->vector_string_val->push_back(new string(token));
|
||||
yylval->vector_string_p_val->push_back(new string(token));
|
||||
else
|
||||
{
|
||||
for (vector<string *>::iterator it=yylval->vector_string_val->begin();
|
||||
it != yylval->vector_string_val->end(); it++)
|
||||
for (vector<string *>::iterator it=yylval->vector_string_p_val->begin();
|
||||
it != yylval->vector_string_p_val->end(); it++)
|
||||
delete *it;
|
||||
delete yylval->vector_string_val;
|
||||
delete yylval->vector_string_p_val;
|
||||
BEGIN NATIVE;
|
||||
yyless(0);
|
||||
dynare_statement = false;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2017 Dynare Team
|
||||
* Copyright (C) 2003-2018 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -1454,6 +1454,21 @@ ParsingDriver::option_vec_int(const string &name_option, const vector<int> *opt)
|
|||
delete opt;
|
||||
}
|
||||
|
||||
void
|
||||
ParsingDriver::option_vec_str(const string &name_option, const vector<string> *opt)
|
||||
{
|
||||
if (options_list.vector_str_options.find(name_option)
|
||||
!= options_list.vector_str_options.end())
|
||||
error("option " + name_option + " declared twice");
|
||||
|
||||
if ((*opt).empty())
|
||||
error("option " + name_option + " was passed an empty vector.");
|
||||
|
||||
options_list.vector_str_options[name_option] = *opt;
|
||||
|
||||
delete opt;
|
||||
}
|
||||
|
||||
void
|
||||
ParsingDriver::linear()
|
||||
{
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2003-2017 Dynare Team
|
||||
* Copyright (C) 2003-2018 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -444,6 +444,8 @@ public:
|
|||
void option_symbol_list(const string &name_option);
|
||||
//! Sets an option to a vector of integers
|
||||
void option_vec_int(const string &name_option, const vector<int> *opt);
|
||||
//! Sets an option to a vector of strings
|
||||
void option_vec_str(const string &name_option, const vector<string> *opt);
|
||||
//! Indicates that the model is linear
|
||||
void linear();
|
||||
//! Adds a variable to temporary symbol list
|
||||
|
|
62
Statement.cc
62
Statement.cc
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2006-2017 Dynare Team
|
||||
* Copyright (C) 2006-2018 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -178,6 +178,22 @@ OptionsList::writeOutput(ostream &output) const
|
|||
else
|
||||
output << it->second.front() << ";" << endl;
|
||||
}
|
||||
|
||||
for (vec_str_options_t::const_iterator it = vector_str_options.begin();
|
||||
it != vector_str_options.end(); it++)
|
||||
{
|
||||
output << "options_." << it->first << " = ";
|
||||
if (it->second.size() > 1)
|
||||
{
|
||||
output << "[";
|
||||
for (vector<string>::const_iterator viit = it->second.begin();
|
||||
viit != it->second.end(); viit++)
|
||||
output << "'" << *viit << "';";
|
||||
output << "];" << endl;
|
||||
}
|
||||
else
|
||||
output << it->second.front() << ";" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -230,6 +246,22 @@ OptionsList::writeOutput(ostream &output, const string &option_group) const
|
|||
else
|
||||
output << it->second.front() << ";" << endl;
|
||||
}
|
||||
|
||||
for (vec_str_options_t::const_iterator it = vector_str_options.begin();
|
||||
it != vector_str_options.end(); it++)
|
||||
{
|
||||
output << option_group << "." << it->first << " = ";
|
||||
if (it->second.size() > 1)
|
||||
{
|
||||
output << "[";
|
||||
for (vector<string>::const_iterator viit = it->second.begin();
|
||||
viit != it->second.end(); viit++)
|
||||
output << "'" << *viit << "';";
|
||||
output << "];" << endl;
|
||||
}
|
||||
else
|
||||
output << it->second.front() << ";" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -323,6 +355,30 @@ OptionsList::writeJsonOutput(ostream &output) const
|
|||
output << ", ";
|
||||
}
|
||||
|
||||
|
||||
for (vec_str_options_t::const_iterator it = vector_str_options.begin();
|
||||
it != vector_str_options.end();)
|
||||
{
|
||||
output << "\""<< it->first << "\": [";
|
||||
if (it->second.size() > 1)
|
||||
{
|
||||
for (vector<string>::const_iterator viit = it->second.begin();
|
||||
viit != it->second.end();)
|
||||
{
|
||||
output << "\"" << *viit << "\"";
|
||||
viit++;
|
||||
if (viit != it->second.end())
|
||||
output << ", ";
|
||||
}
|
||||
}
|
||||
else
|
||||
output << it->second.front() << endl;
|
||||
output << "]";
|
||||
it++;
|
||||
if (it != vector_str_options.end())
|
||||
output << ", ";
|
||||
}
|
||||
|
||||
output << "}";
|
||||
}
|
||||
|
||||
|
@ -335,6 +391,7 @@ OptionsList::clear()
|
|||
date_options.clear();
|
||||
symbol_list_options.clear();
|
||||
vector_int_options.clear();
|
||||
vector_str_options.clear();
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -345,5 +402,6 @@ OptionsList::getNumberOfOptions() const
|
|||
+ string_options.size()
|
||||
+ date_options.size()
|
||||
+ symbol_list_options.size()
|
||||
+ vector_int_options.size();
|
||||
+ vector_int_options.size()
|
||||
+ vector_str_options.size();
|
||||
}
|
||||
|
|
|
@ -179,12 +179,14 @@ public:
|
|||
typedef map<string, string> date_options_t;
|
||||
typedef map<string, SymbolList> symbol_list_options_t;
|
||||
typedef map<string, vector<int> > vec_int_options_t;
|
||||
typedef map<string, vector<string > > vec_str_options_t;
|
||||
num_options_t num_options;
|
||||
paired_num_options_t paired_num_options;
|
||||
string_options_t string_options;
|
||||
date_options_t date_options;
|
||||
symbol_list_options_t symbol_list_options;
|
||||
vec_int_options_t vector_int_options;
|
||||
vec_str_options_t vector_str_options;
|
||||
int getNumberOfOptions() const;
|
||||
void writeOutput(ostream &output) const;
|
||||
void writeOutput(ostream &output, const string &option_group) const;
|
||||
|
|
Loading…
Reference in New Issue