preprocessor: support long name for exogenous, #478

issue#70
Houtan Bastani 2013-11-15 10:39:00 +01:00
parent d368a501d7
commit 8b34189bc3
4 changed files with 28 additions and 8 deletions

View File

@ -390,6 +390,12 @@ varexo_list : varexo_list symbol
{ driver.declare_exogenous($3, $4); } { driver.declare_exogenous($3, $4); }
| symbol TEX_NAME | symbol TEX_NAME
{ driver.declare_exogenous($1, $2); } { 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 varexo_det_list : varexo_det_list symbol
@ -404,6 +410,12 @@ varexo_det_list : varexo_det_list symbol
{ driver.declare_exogenous_det($3, $4); } { driver.declare_exogenous_det($3, $4); }
| symbol TEX_NAME | symbol TEX_NAME
{ driver.declare_exogenous_det($1, $2); } { 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 parameter_list : parameter_list symbol

View File

@ -164,21 +164,25 @@ ParsingDriver::declare_endogenous(string *name, string *tex_name, string *long_n
} }
void void
ParsingDriver::declare_exogenous(string *name, string *tex_name) ParsingDriver::declare_exogenous(string *name, string *tex_name, string *long_name)
{ {
declare_symbol(name, eExogenous, tex_name, NULL); declare_symbol(name, eExogenous, tex_name, long_name);
delete name; delete name;
if (tex_name != NULL) if (tex_name != NULL)
delete tex_name; delete tex_name;
if (long_name != NULL)
delete long_name;
} }
void void
ParsingDriver::declare_exogenous_det(string *name, string *tex_name) ParsingDriver::declare_exogenous_det(string *name, string *tex_name, string *long_name)
{ {
declare_symbol(name, eExogenousDet, tex_name, NULL); declare_symbol(name, eExogenousDet, tex_name, long_name);
delete name; delete name;
if (tex_name != NULL) if (tex_name != NULL)
delete tex_name; delete tex_name;
if (long_name != NULL)
delete long_name;
} }
void void

View File

@ -260,9 +260,9 @@ public:
//! Declares an endogenous variable //! Declares an endogenous variable
void declare_endogenous(string *name, string *tex_name = NULL, string *long_name = NULL); void declare_endogenous(string *name, string *tex_name = NULL, string *long_name = NULL);
//! Declares an exogenous variable //! Declares an exogenous variable
void declare_exogenous(string *name, string *tex_name = NULL); void declare_exogenous(string *name, string *tex_name = NULL, string *long_name = NULL);
//! Declares an exogenous deterministic variable //! Declares an exogenous deterministic variable
void declare_exogenous_det(string *name, string *tex_name = NULL); void declare_exogenous_det(string *name, string *tex_name = NULL, string *long_name = NULL);
//! Declares a parameter //! Declares a parameter
void declare_parameter(string *name, string *tex_name = NULL); void declare_parameter(string *name, string *tex_name = NULL);
//! Declares a statement local variable //! Declares a statement local variable

View File

@ -175,20 +175,24 @@ SymbolTable::writeOutput(ostream &output) const throw (NotYetFrozenException)
{ {
output << "M_.exo_names = '" << getName(exo_ids[0]) << "';" << endl; output << "M_.exo_names = '" << getName(exo_ids[0]) << "';" << endl;
output << "M_.exo_names_tex = '" << getTeXName(exo_ids[0]) << "';" << endl; output << "M_.exo_names_tex = '" << getTeXName(exo_ids[0]) << "';" << endl;
output << "M_.exo_names_long = '" << getLongName(exo_ids[0]) << "';" << endl;
for (int id = 1; id < exo_nbr(); id++) for (int id = 1; id < exo_nbr(); id++)
{ {
output << "M_.exo_names = char(M_.exo_names, '" << getName(exo_ids[id]) << "');" << endl output << "M_.exo_names = char(M_.exo_names, '" << getName(exo_ids[id]) << "');" << endl
<< "M_.exo_names_tex = char(M_.exo_names_tex, '" << getTeXName(exo_ids[id]) << "');" << endl; << "M_.exo_names_tex = char(M_.exo_names_tex, '" << getTeXName(exo_ids[id]) << "');" << endl
<< "M_.exo_names_long = char(M_.exo_names_long, '" << getLongName(exo_ids[id]) << "');" << endl;
} }
} }
if (exo_det_nbr() > 0) if (exo_det_nbr() > 0)
{ {
output << "M_.exo_det_names = '" << getName(exo_det_ids[0]) << "';" << endl; output << "M_.exo_det_names = '" << getName(exo_det_ids[0]) << "';" << endl;
output << "M_.exo_det_names_tex = '" << getTeXName(exo_det_ids[0]) << "';" << endl; output << "M_.exo_det_names_tex = '" << getTeXName(exo_det_ids[0]) << "';" << endl;
output << "M_.exo_det_names_long = '" << getLongName(exo_det_ids[0]) << "';" << endl;
for (int id = 1; id < exo_det_nbr(); id++) for (int id = 1; id < exo_det_nbr(); id++)
{ {
output << "M_.exo_det_names = char(M_.exo_det_names, '" << getName(exo_det_ids[id]) << "');" << endl output << "M_.exo_det_names = char(M_.exo_det_names, '" << getName(exo_det_ids[id]) << "');" << endl
<< "M_.exo_det_names_tex = char(M_.exo_det_names_tex, '" << getTeXName(exo_det_ids[id]) << "');" << endl; << "M_.exo_det_names_tex = char(M_.exo_det_names_tex, '" << getTeXName(exo_det_ids[id]) << "');" << endl
<< "M_.exo_det_names_long = char(M_.exo_det_names_long, '" << getLongName(exo_det_ids[id]) << "');" << endl;
} }
} }
if (endo_nbr() > 0) if (endo_nbr() > 0)