diff --git a/DynareBison.yy b/DynareBison.yy index defb9cc9..bb88b363 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -740,14 +740,19 @@ period_list : period_list COMMA INT_NUMBER sigma_e : SIGMA_E EQUAL '[' triangular_matrix ']' ';' { driver.do_sigma_e(); }; -value_list - : value_list COMMA expression - {driver.add_value($3);} - | value_list number - {driver.add_value($2);} - | expression - {driver.add_value($1);} - ; +value_list : value_list COMMA '(' expression ')' + { driver.add_value($4); } + | value_list '(' expression ')' + { driver.add_value($3); } + | '(' expression ')' + { driver.add_value($2); } + | value_list COMMA signed_float + { driver.add_value($3); } + | value_list signed_float + { driver.add_value($2); } + | signed_float + { driver.add_value($1); } + ; triangular_matrix : triangular_matrix ';' triangular_row { driver.end_of_row(); } diff --git a/ParsingDriver.cc b/ParsingDriver.cc index a719334a..e3eb96a5 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -700,9 +700,15 @@ ParsingDriver::add_value(expr_t value) } void -ParsingDriver::add_value(string *p1) +ParsingDriver::add_value(string *v) { - det_shocks_values.push_back(add_constant(p1)); + expr_t id; + if (v->at(0) == '-') + id = data_tree->AddUMinus(data_tree->AddNumConstant(v->substr(1, string::npos))); + else + id = data_tree->AddNumConstant(*v); + delete v; + det_shocks_values.push_back(id); } void diff --git a/ParsingDriver.hh b/ParsingDriver.hh index 32147ee2..a84cf240 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -283,7 +283,8 @@ public: //! Adds a deterministic shock value void add_value(expr_t value); //! Adds a deterministic shock value - void add_value(string *p1); + /*! \param v a string containing a (possibly negative) numeric constant */ + void add_value(string *v); //! Writes a Sigma_e block void do_sigma_e(); //! Ends row of Sigma_e block