changed preprocessor internals to support vector<int> type. changed svar_identification to store symbols by symbol ids. Added missing Doxygen comments.
git-svn-id: https://www.dynare.org/svn/dynare/trunk@3240 ac1d8469-bf42-47a9-8791-bf33cf982152issue#70
parent
07d536d020
commit
04aa1dbdb3
|
@ -1126,7 +1126,7 @@ SvarIdentificationStatement::writeOutput(ostream &output, const string &basename
|
|||
{
|
||||
for (unsigned int h = 0; h < it->second.size(); h++)
|
||||
{
|
||||
int j = symbol_table.getTypeSpecificID(it->second.at(h)) + 1;
|
||||
int j = it->second.at(h) + 1;
|
||||
int i = it->first.second;
|
||||
if (j < 1 || j > n || (int)h+1 > n || i < 1)
|
||||
{
|
||||
|
@ -1252,7 +1252,6 @@ SvarStatement::writeOutput(ostream &output, const string &basename) const
|
|||
for (vector<int>::const_iterator viit=itv->second.begin();
|
||||
viit!=itv->second.end(); viit++)
|
||||
output << *viit << ";";
|
||||
output.seekp((long)output.tellp()-1);
|
||||
output << "];" << endl;
|
||||
}
|
||||
else if (itv->second.size() == 1)
|
||||
|
|
|
@ -492,7 +492,7 @@ public:
|
|||
class SvarIdentificationStatement : public Statement
|
||||
{
|
||||
public:
|
||||
typedef map<pair<int, int>, vector<string> > svar_identification_exclusion_type;
|
||||
typedef map<pair<int, int>, vector<int> > svar_identification_exclusion_type;
|
||||
private:
|
||||
const svar_identification_exclusion_type exclusion;
|
||||
const bool upper_cholesky_present;
|
||||
|
|
|
@ -163,12 +163,12 @@ class ParsingDriver;
|
|||
%type <node_val> equation hand_side model_var
|
||||
%type <string_val> signed_float signed_integer prior
|
||||
%type <string_val> filename symbol
|
||||
%type <string_val> value value1 vec_int_elem vec_int_1 vec_int
|
||||
%type <string_val> value value1
|
||||
%type <string_val> vec_value_1 vec_value
|
||||
%type <string_val> calib_arg2 range number
|
||||
%type <symbol_type_val> change_type_arg
|
||||
%type <vector_string_val> change_type_var_list
|
||||
%type <vector_int_val> vector_int_body vector_int
|
||||
%type <vector_int_val> vec_int_elem vec_int_1 vec_int vec_int_number
|
||||
|
||||
%%
|
||||
|
||||
|
@ -1667,15 +1667,15 @@ o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.option_num("simul_seed", $3)
|
|||
o_qz_criterium : QZ_CRITERIUM EQUAL number { driver.option_num("qz_criterium", $3); };
|
||||
o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); };
|
||||
o_nobs : NOBS EQUAL vec_int
|
||||
{ driver.option_num("nobs", $3); }
|
||||
| NOBS EQUAL INT_NUMBER
|
||||
{ driver.option_num("nobs", $3); }
|
||||
{ driver.option_vec_int("nobs", $3); }
|
||||
| NOBS EQUAL vec_int_number
|
||||
{ driver.option_vec_int("nobs", $3); }
|
||||
;
|
||||
o_conditional_variance_decomposition : CONDITIONAL_VARIANCE_DECOMPOSITION EQUAL vec_int
|
||||
{ driver.option_num("conditional_variance_decomposition", $3); }
|
||||
| CONDITIONAL_VARIANCE_DECOMPOSITION EQUAL INT_NUMBER
|
||||
{ driver.option_num("conditional_variance_decomposition", $3); }
|
||||
;
|
||||
{ driver.option_vec_int("conditional_variance_decomposition", $3); }
|
||||
| CONDITIONAL_VARIANCE_DECOMPOSITION EQUAL vec_int_number
|
||||
{ driver.option_vec_int("conditional_variance_decomposition", $3); }
|
||||
;
|
||||
o_first_obs : FIRST_OBS EQUAL INT_NUMBER { driver.option_num("first_obs", $3); };
|
||||
o_prefilter : PREFILTER EQUAL INT_NUMBER { driver.option_num("prefilter", $3); };
|
||||
o_presample : PRESAMPLE EQUAL INT_NUMBER { driver.option_num("presample", $3); };
|
||||
|
@ -1720,7 +1720,7 @@ o_print : PRINT { driver.option_num("noprint", "0"); };
|
|||
o_noprint : NOPRINT { driver.option_num("noprint", "1"); };
|
||||
o_xls_sheet : XLS_SHEET EQUAL symbol { driver.option_str("xls_sheet", $3); };
|
||||
o_xls_range : XLS_RANGE EQUAL range { driver.option_str("xls_range", $3); };
|
||||
o_filter_step_ahead : FILTER_STEP_AHEAD EQUAL vec_int { driver.option_num("filter_step_ahead", $3); };
|
||||
o_filter_step_ahead : FILTER_STEP_AHEAD EQUAL vec_int { driver.option_vec_int("filter_step_ahead", $3); };
|
||||
o_constant : CONSTANT { driver.option_num("noconstant", "0"); };
|
||||
o_noconstant : NOCONSTANT { driver.option_num("noconstant", "1"); };
|
||||
o_mh_recover : MH_RECOVER { driver.option_num("mh_recover", "1"); };
|
||||
|
@ -1873,41 +1873,12 @@ o_number_of_states : NUMBER_OF_STATES EQUAL INT_NUMBER { driver.option_num("ms.n
|
|||
o_coefficients : COEFFICIENTS { driver.option_str("ms.coefficients","svar_coefficients"); };
|
||||
o_variances : VARIANCES { driver.option_str("ms.variances","svar_variances"); };
|
||||
o_constants : CONSTANTS { driver.option_str("ms.constants","svar_constants"); };
|
||||
o_equations : EQUATIONS EQUAL vector_int
|
||||
o_equations : EQUATIONS EQUAL vec_int
|
||||
{ driver.option_vec_int("ms.equations",$3); }
|
||||
| EQUATIONS EQUAL vec_int_number
|
||||
{ driver.option_vec_int("ms.equations",$3); }
|
||||
| EQUATIONS EQUAL INT_NUMBER
|
||||
{
|
||||
vector<int> *oneInt = new vector<int>();
|
||||
oneInt->push_back(atoi((*$3).c_str()));
|
||||
driver.option_vec_int("ms.equations",oneInt);
|
||||
delete oneInt;
|
||||
}
|
||||
;
|
||||
|
||||
vector_int_body : INT_NUMBER
|
||||
{ $$ = new vector<int>(); $$->push_back(atoi((*$1).c_str())); }
|
||||
| vector_int_body INT_NUMBER
|
||||
{ $$ = $1; $1->push_back(atoi((*$2).c_str())); }
|
||||
| vector_int_body COMMA INT_NUMBER
|
||||
{ $$ = $1; $1->push_back(atoi((*$3).c_str())); }
|
||||
;
|
||||
|
||||
vector_int : '[' vector_int_body ']'
|
||||
{ $$ = $2; }
|
||||
| '[' vector_int_body COMMA ']'
|
||||
{ $$ = $2; }
|
||||
| '[' COMMA vector_int_body ']'
|
||||
{ $$ = $3; }
|
||||
| '[' COMMA vector_int_body COMMA ']'
|
||||
{ $$ = $3; }
|
||||
| '[' INT_NUMBER ':' INT_NUMBER ']'
|
||||
{
|
||||
$$ = new vector<int>();
|
||||
for(int i=atoi((*$2).c_str()); i<=atoi((*$4).c_str()); i++)
|
||||
$$->push_back(i);
|
||||
}
|
||||
;
|
||||
|
||||
o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments"); };
|
||||
|
||||
range : symbol ':' symbol
|
||||
|
@ -1918,38 +1889,45 @@ range : symbol ':' symbol
|
|||
$$ = $1;
|
||||
};
|
||||
|
||||
vec_int_elem : INT_NUMBER
|
||||
vec_int_number : INT_NUMBER { $$ = new vector<int>(); $$->push_back(atoi((*$1).c_str())); delete $1; };
|
||||
|
||||
vec_int_elem : vec_int_number
|
||||
| INT_NUMBER ':' INT_NUMBER
|
||||
{
|
||||
$1->append(":");
|
||||
$1->append(*$3);
|
||||
$$ = new vector<int>();
|
||||
for(int i=atoi((*$1).c_str()); i<=atoi((*$3).c_str()); i++)
|
||||
$$->push_back(i);
|
||||
delete $1;
|
||||
delete $3;
|
||||
$$ = $1;
|
||||
}
|
||||
;
|
||||
|
||||
vec_int_1 : '[' vec_int_elem
|
||||
{ $2->insert(0, "["); $$ = $2;}
|
||||
{ $$ = $2;}
|
||||
| '[' COMMA vec_int_elem
|
||||
{ $$ = $3;}
|
||||
| vec_int_1 vec_int_elem
|
||||
{
|
||||
$1->append(" ");
|
||||
$1->append(*$2);
|
||||
delete $2;
|
||||
$$ = $1;
|
||||
for (vector<int>::const_iterator it=$2->begin();
|
||||
it!=$2->end(); it++)
|
||||
$1->push_back(*it);
|
||||
delete $2;
|
||||
}
|
||||
| vec_int_1 COMMA vec_int_elem
|
||||
{
|
||||
$1->append(",");
|
||||
$1->append(*$3);
|
||||
delete $3;
|
||||
$$ = $1;
|
||||
for (vector<int>::const_iterator it=$3->begin();
|
||||
it!=$3->end(); it++)
|
||||
$1->push_back(*it);
|
||||
delete $3;
|
||||
}
|
||||
;
|
||||
|
||||
vec_int : vec_int_1 ']'
|
||||
{ $1->append("]"); $$ = $1; }
|
||||
{ $$ = $1; }
|
||||
| vec_int_1 COMMA ']'
|
||||
{ $1->append(",]"); $$ = $1; }
|
||||
{ $$ = $1; }
|
||||
;
|
||||
|
||||
vec_value_1 : '[' value1
|
||||
|
|
|
@ -608,7 +608,7 @@ ParsingDriver::combine_lag_and_restriction(string *lag)
|
|||
if (it->first.first == current_lag)
|
||||
error("lag " + *lag + " used more than once.");
|
||||
|
||||
for(map<int, vector<string> >::const_iterator it = svar_equation_restrictions.begin();
|
||||
for(map<int, vector<int> >::const_iterator it = svar_equation_restrictions.begin();
|
||||
it != svar_equation_restrictions.end(); it++ )
|
||||
svar_ident_exclusion_values[make_pair(current_lag, it->first)] = it->second;
|
||||
|
||||
|
@ -638,14 +638,18 @@ void
|
|||
ParsingDriver::add_in_svar_restriction_symbols(string *tmp_var)
|
||||
{
|
||||
check_symbol_existence(*tmp_var);
|
||||
for (unsigned int i=0; i<svar_restriction_symbols.size(); i++)
|
||||
if (*tmp_var==svar_restriction_symbols.at(i))
|
||||
int symb_id = mod_file->symbol_table.getID(*tmp_var);
|
||||
|
||||
for (vector<int>::const_iterator viit=svar_restriction_symbols.begin();
|
||||
viit!=svar_restriction_symbols.end(); viit++)
|
||||
if (symb_id==*viit)
|
||||
error(*tmp_var + " restriction added twice.");
|
||||
|
||||
svar_restriction_symbols.push_back(*tmp_var);
|
||||
svar_restriction_symbols.push_back(symb_id);
|
||||
delete tmp_var;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ParsingDriver::add_upper_cholesky()
|
||||
{
|
||||
|
@ -768,7 +772,11 @@ ParsingDriver::option_vec_int(const string &name_option, const vector<int> *opt)
|
|||
!= options_list.vector_int_options.end())
|
||||
error("option " + name_option + " declared twice");
|
||||
|
||||
if ((*opt).empty())
|
||||
error("option " + name_option + " was passed an empty vector.");
|
||||
|
||||
options_list.vector_int_options[name_option] = *opt;
|
||||
delete opt;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1234,14 +1242,9 @@ ParsingDriver::svar()
|
|||
|
||||
itv = options_list.vector_int_options.find("ms.equations");
|
||||
if (itv != options_list.vector_int_options.end())
|
||||
{
|
||||
if (itv->second.empty())
|
||||
error("There was an error in the integers passed to the equation option.");
|
||||
|
||||
for (vector<int>::const_iterator viit=itv->second.begin(); viit != itv->second.end(); viit++)
|
||||
if (*viit <= 0)
|
||||
error("The value(s) passed to the equation option must be greater than zero.");
|
||||
}
|
||||
for (vector<int>::const_iterator viit=itv->second.begin(); viit != itv->second.end(); viit++)
|
||||
if (*viit <= 0)
|
||||
error("The value(s) passed to the equation option must be greater than zero.");
|
||||
|
||||
mod_file->addStatement(new SvarStatement(options_list));
|
||||
options_list.clear();
|
||||
|
|
|
@ -145,9 +145,13 @@ private:
|
|||
HomotopyStatement::homotopy_values_type homotopy_values;
|
||||
//! Temporary storage for svar_identification blocks
|
||||
SvarIdentificationStatement::svar_identification_exclusion_type svar_ident_exclusion_values;
|
||||
map<int, vector<string> > svar_equation_restrictions;
|
||||
vector<string> svar_restriction_symbols;
|
||||
//! Temporary storage for mapping the equation number to the restrictions within an svar_identification bock
|
||||
map<int, vector<int> > svar_equation_restrictions;
|
||||
//! Temporary storage for restrictions in an equation within an svar_identification bock
|
||||
vector<int> svar_restriction_symbols;
|
||||
//! Temporary storage for upper cholesky within an svar_identification bock
|
||||
bool svar_upper_cholesky;
|
||||
//! Temporary storage for lower cholesky within an svar_identification bock
|
||||
bool svar_lower_cholesky;
|
||||
|
||||
//! Temporary storage for argument list of unknown function
|
||||
|
@ -328,10 +332,15 @@ public:
|
|||
void set_varobs();
|
||||
//! Svar_Identification Statement
|
||||
void end_svar_identification();
|
||||
//! Svar_Identification Statement: match list of restrictions and equation number with lag
|
||||
void combine_lag_and_restriction(string *lag);
|
||||
//! Svar_Identification Statement: match list of restrictions with equation number
|
||||
void add_restriction_in_equation(string *equation);
|
||||
//! Svar_Identification Statement: add list of restriction symbol ids
|
||||
void add_in_svar_restriction_symbols(string *name);
|
||||
//! Svar_Identification Statement: restriction of form upper cholesky
|
||||
void add_upper_cholesky();
|
||||
//! Svar_Identification Statement: restriction of form lower cholesky
|
||||
void add_lower_cholesky();
|
||||
//! Forecast Statement
|
||||
void forecast();
|
||||
|
|
|
@ -91,7 +91,6 @@ OptionsList::writeOutput(ostream &output) const
|
|||
for (vector<int>::const_iterator viit=it->second.begin();
|
||||
viit!=it->second.end(); viit++)
|
||||
output << *viit << ";";
|
||||
output.seekp((long)output.tellp()-1);
|
||||
output << "];" << endl;
|
||||
}
|
||||
else
|
||||
|
@ -131,7 +130,6 @@ OptionsList::writeOutput(ostream &output, const string &option_group) const
|
|||
for (vector<int>::const_iterator viit=it->second.begin();
|
||||
viit!=it->second.end(); viit++)
|
||||
output << *viit << ";";
|
||||
output.seekp((long)output.tellp()-1);
|
||||
output << "];" << endl;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue