From 8b34189bc3966d604944b513d298f89f5c3b3b40 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 15 Nov 2013 10:39:00 +0100 Subject: [PATCH] preprocessor: support long name for exogenous, #478 --- DynareBison.yy | 12 ++++++++++++ ParsingDriver.cc | 12 ++++++++---- ParsingDriver.hh | 4 ++-- SymbolTable.cc | 8 ++++++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/DynareBison.yy b/DynareBison.yy index a12a7ad0..08052f77 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -390,6 +390,12 @@ varexo_list : varexo_list symbol { 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 @@ -404,6 +410,12 @@ varexo_det_list : varexo_det_list symbol { 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 diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 6d389865..79505b31 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -164,21 +164,25 @@ ParsingDriver::declare_endogenous(string *name, string *tex_name, string *long_n } 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; if (tex_name != NULL) delete tex_name; + if (long_name != NULL) + delete long_name; } 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; if (tex_name != NULL) delete tex_name; + if (long_name != NULL) + delete long_name; } void diff --git a/ParsingDriver.hh b/ParsingDriver.hh index db19f2b0..27d9800b 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -260,9 +260,9 @@ public: //! Declares an endogenous variable void declare_endogenous(string *name, string *tex_name = NULL, string *long_name = NULL); //! 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 - 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 void declare_parameter(string *name, string *tex_name = NULL); //! Declares a statement local variable diff --git a/SymbolTable.cc b/SymbolTable.cc index 039024e5..102814a9 100644 --- a/SymbolTable.cc +++ b/SymbolTable.cc @@ -175,20 +175,24 @@ SymbolTable::writeOutput(ostream &output) const throw (NotYetFrozenException) { output << "M_.exo_names = '" << getName(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++) { 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) { 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_long = '" << getLongName(exo_det_ids[0]) << "';" << endl; 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 - << "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)