diff --git a/parser.src/DynareBison.yy b/parser.src/DynareBison.yy index 771af56c630e93cb1d9c21c5085eb09316838c27..f17d3180b298ee6de4a8d3cc0d8a0d95aa04e91f 100644 --- a/parser.src/DynareBison.yy +++ b/parser.src/DynareBison.yy @@ -294,13 +294,11 @@ ; model - : MODEL {_parser->initialize_model();} ';' equation_list END + : MODEL ';' equation_list END {_parser->check_model();} - | MODEL '(' LINEAR ')' ';' {_parser->option_num("linear","1"); - _parser->initialize_model();} + | MODEL '(' LINEAR ')' ';' {_parser->option_num("linear","1");} equation_list END {_parser->check_model();} - | MODEL '(' USE_DLL ')' ';' {_parser->use_dll(); - _parser->initialize_model();} + | MODEL '(' USE_DLL ')' ';' {_parser->use_dll();} equation_list END {_parser->check_model();} ; diff --git a/parser.src/DynareParser.cc b/parser.src/DynareParser.cc index 830308b044c6cd123a7b4913c67054afa37584b3..2e96ab7016f3363f5d6bac5ba603ee7aed7a63ba 100644 --- a/parser.src/DynareParser.cc +++ b/parser.src/DynareParser.cc @@ -209,13 +209,6 @@ void dynare::parser::init_param(Objects* lhs, Objects* rhs) { numerical_initialization.SetConstant(lhs->symbol, rhs->symbol); } -void dynare::parser::init_param(Objects* lhs) -{ - //cout << "Befor set\n"; - expression.set(); - numerical_initialization.SetConstant(lhs->symbol, expression.get()); - expression.clear(); -} void dynare::parser::init_val(Objects* lhs, Objects* rhs) { numerical_initialization.SetInit(lhs->symbol, rhs->symbol); @@ -225,16 +218,6 @@ void dynare::parser::hist_val(Objects* lhs, Objects* slag, Objects* rhs) int lag = atoi((slag->symbol).c_str()); numerical_initialization.SetHist(lhs->symbol, lag, rhs->symbol); } -void dynare::parser::hist_val(Objects* lhs, Objects* slag) -{ - int lag = atoi((slag->symbol).c_str()); - expression.set(); - numerical_initialization.SetHist(lhs->symbol, lag, expression.get()); - expression.clear(); -} -void dynare::parser::initialize_model(void) -{ -} void dynare::parser::use_dll(void) { // Seetting variable momber offset to use C outputs diff --git a/parser.src/ModelTree.cc b/parser.src/ModelTree.cc index c30e1b088556b2ffadc7d06cda426e985c6e5a36..8bffade363cc180bc15c5e488ca0b9e796533f45 100644 --- a/parser.src/ModelTree.cc +++ b/parser.src/ModelTree.cc @@ -658,7 +658,6 @@ inline NodeID ModelTree::DeriveArgument(NodeID iArg, Type iType, int iVarID) case eUNDEF : return NullID; case eLoopIndex : - case eUnkownFunction : return Zero; default : cout << "ModelTree::DeriveArgument : Error: Unknown Type\n"; @@ -1141,130 +1140,6 @@ inline string ModelTree::getExpression(NodeID StartID, EquationType iEquationTy return exp.str(); } //------------------------------------------------------------------------------ -/* -void ModelTree::RemoveUnref(int iBeginID, int iEndID, int iOrder) -{ - int id = iEndID; - while (id >= iBeginID) - { - //cout << id; - if (accumulate(mModelTree[id].reference_count.begin(),mModelTree[id].reference_count.end(),0) == 0) - { - //cout << " Removed" << endl; - //Decreasing reference count of arguments model tree - // First argument is a temporary result, - if (mModelTree[id].type1 == eTempResult) - { - //Decreasing reference count of argument 1 in model tree - int arg = mModelTree[id].id1; - mModelTree[arg].reference_count[iOrder]--; - } - // Second argument has id >=0 (temporary result), - if (mModelTree[id].id2 >= 0) - { - //Decreasing reference count of argument 2 in model tree - int arg = mModelTree[id].id2; - mModelTree[arg].reference_count[iOrder]--; - } - //Updating equals ids in mDerivativeIndex - for (int d=0; d<mDerivativeIndex[iOrder-1].size();d++) - { - if (mDerivativeIndex[iOrder-1][d].token_id>id) - mDerivativeIndex[iOrder-1][d].token_id--; - } - //cout << "ModelTree size : " << mModelTree.size() << endl; - //Updatting upper token ids in model tree and map - mIndexOfTokens.erase(Key((MToken) mModelTree[id])); - for (int id2 = id+1; id2 <= iEndID; id2++) - { - //cout << " - " << mIndexOfTokens[Key((MToken) mModelTree[id2])]; - mIndexOfTokens.erase(Key((MToken) mModelTree[id2])); - } - //cout << endl; - for (int id2 = id+1; id2 <= iEndID; id2++) - { - // Updating derivative ids - map<int, int, less<int> >::iterator it; - for (it = mModelTree[id2].p1.begin(); it != mModelTree[id2].p1.end(); it++) - { - int p1 = (*it).second; - int var = (*it).first; - //cout << "===========" << mModelTree[p1].d1[var] << "/"; - mModelTree[p1].d1[var] = id2-1; - //cout << mModelTree[p1].d1[var] << endl; - } - // Updating ModelTree map - if (mModelTree[id2].type1 == eTempResult) - { - if (mModelTree[id2].id1>id) - { - mModelTree[id2].id1--; - } - } - if (mModelTree[id2].id2>id) - { - mModelTree[id2].id2--; - } - } - mModelTree.erase(mModelTree.begin()+id); - for (int id2 = id; id2 < iEndID; id2++) - { - mIndexOfTokens[Key((MToken) mModelTree[id2])] = id2; - //cout << " - " << mIndexOfTokens[Key((MToken) mModelTree[id2])]; - } - //Removing token from model tree - //cout << "ModelTree size : " << mModelTree.size() << endl; - - - iEndID--; - id--; - } - else - { - id--; - //cout << endl; - } - } - -} -//------------------------------------------------------------------------------ -*/ -/* -void ModelTree::DecrementUnref(int iBeginID, int iEndID, int iOrder) -{ - int id = iEndID; - while (id >= iBeginID) - { - //cout << id; - if (accumulate(mModelTree[id].reference_count.begin(),mModelTree[id].reference_count.end(),0) == 0) - { - //Decreasing reference count of arguments model tree - // First argument is a temporary result, - if (mModelTree[id].type1 == eTempResult) - { - //Decreasing reference count of argument 1 in model tree - int arg = mModelTree[id].id1; - mModelTree[arg].reference_count[iOrder]--; - } - // Second argument has id >=0 (temporary result), - if (mModelTree[id].id2 >= 0) - { - //Decreasing reference count of argument 2 in model tree - int arg = mModelTree[id].id2; - mModelTree[arg].reference_count[iOrder]--; - } - id--; - } - else - { - id--; - //cout << endl; - } - } - -} -*/ -//------------------------------------------------------------------------------ inline string ModelTree::getArgument(NodeID id, Type type, EquationType iEquationType) { diff --git a/parser.src/NumericalInitialization.cc b/parser.src/NumericalInitialization.cc index aa4548c8f62eb6986c19cdd51a1ef48c4b407dae..921c9ade8ea6f50fd03e6b4288e4cf602e6e2b1b 100644 --- a/parser.src/NumericalInitialization.cc +++ b/parser.src/NumericalInitialization.cc @@ -48,28 +48,6 @@ void NumericalInitialization::SetConstant (string name, string expression) } //------------------------------------------------------------------------------ -void NumericalInitialization::SetLocalConstant (string name, string expression) -{ - - //Testing if symbol exists - if (SymbolTable::Exist(name)) - { - if (SymbolTable::getType(name) != eLocalParameter) - { - string msg = "Using existing symbol " + name + - " as local parameter name"; - (* error) (msg.c_str()); - } - } - else - { - SymbolTable::AddSymbolDeclar(name,eLocalParameter,name); - } - - // Writing expression - *output << name << " = " << expression << ";\n"; -} -//------------------------------------------------------------------------------ void NumericalInitialization::BeginInitval (void) { diff --git a/parser.src/SymbolTable.cc b/parser.src/SymbolTable.cc index eec7fc2602e27b2d4bc1a1de991a6ab93103fd66..df33f2b3957dd251a024a8e374c0c9d88e61667b 100644 --- a/parser.src/SymbolTable.cc +++ b/parser.src/SymbolTable.cc @@ -116,11 +116,6 @@ void SymbolTable::SetReferenced(string name) symboltable[name].referenced = eReferenced; } //------------------------------------------------------------------------------ -void SymbolTable::SetOutOfScoop(string name) -{ - symboltable[name].referenced = eOutOfScoop; -} -//------------------------------------------------------------------------------ Reference SymbolTable::isReferenced(std::string name) { return symboltable[name].referenced; @@ -283,34 +278,3 @@ void SymbolTable::erase_local_parameters(void) } } //------------------------------------------------------------------------------ -/* -ostream & operator << (ostream & output, Symbol s) -{ - switch (s.type) { - case eExogenous : output << "Exogenous , "; break; - case eExogenousDet : output << "ExogenousDet ,"; break; - case eEndogenous : output << "Endogenous , "; break; - case eRecursiveVariable : output << "RecursiveVariable , "; break; - case eParameter : output << "Parameter , "; break; - case eLoopIndex : output << "LoopIndex , "; break; - } - output << s.id; - switch (s.referenced) { - case eReferenced : cout << ", Referenced, "; break; - case eNotReferenced : cout << ", NotReferenced, "; break; - case eOutOfScoop : cout << ", OutOfScoop, "; break; - - } - return output; -} -//------------------------------------------------------------------------------ -void SymbolTable::PrintSymbolTable(void) -{ - map<string, Symbol, less<string> >::iterator iter; - cout << "\nCurrent Map :\n"; - for (iter = symboltable.begin();iter != symboltable.end(); iter++) - cout << (*iter).first << " , " << (*iter).second << endl;; -} -//------------------------------------------------------------------------------ -*/ - diff --git a/parser.src/include/DynareParser.h b/parser.src/include/DynareParser.h index 684ea7d26c158a705f618e9cf42463043584c7e0..baa007033d91dd3c7f6cd94c9f183692e992caf8 100644 --- a/parser.src/include/DynareParser.h +++ b/parser.src/include/DynareParser.h @@ -120,8 +120,6 @@ namespace dynare void check_model(void); /*! Executes final instructions */ void finish(void); - /*! Initializes the model */ - void initialize_model(void); /*! Sets variable offset of ModelTree class to use C output */ void use_dll(void); /*! Adds an endogenous variable to SymbolTable*/ @@ -152,19 +150,16 @@ namespace dynare Objects* add_expression_token( Objects* arg1, Objects* op); /*! Gets literal expression string */ Objects* get_expression(Objects* exp); - /* Concatenates two string objects */ + /*! Concatenates two string objects */ Objects* cat(Objects* string1, Objects* string2); + /*! Concatenates two string objects with a space between */ Objects* cat_with_space(Objects* string1, Objects* string2); /*! Writes parameter intitialisation expression */ void init_param(Objects* lhs, Objects* rhs); - /*! Writes parameter intitialisation expression */ - void init_param(Objects* lhs); /*! Writes an initval block */ void init_val(Objects* lhs, Objects* rhs); /*! Writes an histval block */ void hist_val(Objects* lhs, Objects* lag, Objects* rhs); - /*! Writes an histval block */ - void hist_val(Objects* lhs, Objects* lag); /*! Writes begining of an initval block */ void begin_initval(void); /*! Writes end of an initval block */ diff --git a/parser.src/include/ModelTree.h b/parser.src/include/ModelTree.h index f530080b7a5d936eedb8e4e8cf4b86eae0382008..278f60eb3fa96870453f234a9ee225048ae7f9d0 100644 --- a/parser.src/include/ModelTree.h +++ b/parser.src/include/ModelTree.h @@ -13,7 +13,6 @@ #include <stack> #include <sstream> #include <fstream> -//#include <ext/hash_map> //------------------------------------------------------------------------------ #include "SymbolTable.h" #include "OperatorTable.h" @@ -31,10 +30,6 @@ class ModelTree : public DataTree /*! Stores ID of equations and their derivatives */ std::vector<std::vector<DerivativeIndex> > mDerivativeIndex; - /*! Stores ID of equations and their 1st ordre derivatives */ - //vector<DerivativeIndex> mDerivative1Index; - /*! Stores ID of equations and their 2nd ordre derivatives */ - //vector<DerivativeIndex> mDerivative2Index; /*! Only used for C++ standalone version */ std::vector<double> mResults; /*! Output for static model */ @@ -71,10 +66,6 @@ class ModelTree : public DataTree depending on its time cost and number of times it is referenced in model tree */ inline bool writeAsTemp(NodeID id); - /*! Remove unreferenced tokens after a derivation */ - //void RemoveUnref(int iBeginID, int iEndID, int iOrder); - /*! Decrementing reference couter of unreferenced tokens in last derivative */ - void DecrementUnref(int iBeginID, int iEndID, int iOrder); inline int optimize(NodeID id); public : /*! When Jacobian (vs endogenous) is writen this flag is set to true */ diff --git a/parser.src/include/ModelTypes.h b/parser.src/include/ModelTypes.h index 0aa6315ee024ef1a683dab9f2887924ec13e6490..4b6c8cb6423a03f04fee07d153fc5ad00e443798 100644 --- a/parser.src/include/ModelTypes.h +++ b/parser.src/include/ModelTypes.h @@ -212,7 +212,6 @@ struct MetaToken : public MToken }; //------------------------------------------------------------------------------ /*! - \function oparator < \brief Less operator define comparaison function for map class */ diff --git a/parser.src/include/NumericalInitialization.h b/parser.src/include/NumericalInitialization.h index b4b1658d47e060a2ca2476af078f0ccf15963011..46091485dd9f1bca2454876e4429d8216e102564 100644 --- a/parser.src/include/NumericalInitialization.h +++ b/parser.src/include/NumericalInitialization.h @@ -39,7 +39,6 @@ class NumericalInitialization - in C++, evaluate expression and set value for Name in Parameters_Table\n */ void SetConstant(std::string name,std::string expression); - void SetLocalConstant(std::string name,std::string expression); /*! \par Description Initializes an initval block to set initial values for variables diff --git a/parser.src/include/SymbolTable.h b/parser.src/include/SymbolTable.h index 11aaa20922b0d6bbff2b63721d7d9773ef80fedd..a7ba4d3a3cba3410fa6e769287a51759ed2fafd7 100644 --- a/parser.src/include/SymbolTable.h +++ b/parser.src/include/SymbolTable.h @@ -34,8 +34,6 @@ class SymbolTable - set Name and Type\n - increase corresponding counter in ModelParameters class\n */ - /*! Pointer to current parssing line to set by class parser*/ - //int *current_line; static int AddSymbol(std::string name,Type type, std::string tex_name); protected : /*! Symbol table map */ @@ -51,28 +49,26 @@ class SymbolTable SymbolTable(); /*! Destructor*/ ~SymbolTable(); + /*! Pointer to error function of parser class */ + static void (* error) (const char* m); /*! Adds a symbol apearing in declaration - warning if symbol is already set with same type - error if symbol is already set with different type - set name, type - increase corresponding counter in ModelParameters */ - /*! Pointer to error function of parser class */ - static void (* error) (const char* m); static int AddSymbolDeclar(std::string name,Type type, std::string tex_name); /*! Adds symbol range */ static void AddSymbolRange(std::string name,int nbr,Type type, std::string tex_name); /*! Adds a lag to field lags */ static void AddLag(std::string name,int lag); - /*! Tests if symbol exists in symbol table - \return true if exists, false outherwise - */ /*! Sets a symbol as referenced */ static void SetReferenced(std::string name); /*! Return eReferenced if symbol is referenced eNotReferenced otherwise*/ static Reference isReferenced(std::string name); - /*! Sets a symbol as out of scoop */ - static void SetOutOfScoop(std::string name); + /*! Tests if symbol exists in symbol table + \return true if exists, false outherwise + */ inline static bool Exist(std::string name); /*! Gets name by type and ID */ inline static std::string getNameByID(Type type,int id); @@ -87,7 +83,6 @@ class SymbolTable /*! Checks if symbols are used in model equations, removes unused symbol */ void clean(); void erase_local_parameters(); - //void PrintSymbolTable(void); }; inline bool SymbolTable::Exist(std::string name) { diff --git a/parser.src/include/SymbolTableTypes.h b/parser.src/include/SymbolTableTypes.h index 93960a2ac15014f54fe9712399d88fe370c6d1b2..6093363b6d483a71376c7a6f52891773f40b02b4 100644 --- a/parser.src/include/SymbolTableTypes.h +++ b/parser.src/include/SymbolTableTypes.h @@ -12,24 +12,22 @@ /*! Symbol type enum */ enum Type { - eEndogenous = 0, //!< Endogenousous - eExogenous = 1, //!< Exogenousous - eExogenousDet = 2, //!< Exogenousous deterministic (new) + eEndogenous = 0, //!< Endogenous + eExogenous = 1, //!< Exogenous + eExogenousDet = 2, //!< Exogenous deterministic (new) eRecursiveVariable = 3, //!< Recursive variable (reserved for future use) eParameter = 4, //!< Parameter eLocalParameter = 10, //!< Parameter local to a model eLoopIndex = 5, //!< Loop index eTempResult = 6, //!< Temporary result, used only in Expression class eNumericalConstant = 7, //!< Numerical constant, used only in Expression class - eUnkownFunction = 8, //!< Unkown functions, used only in Expression class - eUNDEF = 9 //!< Undefinded + eUNDEF = 9 //!< Undefined }; /*! Symbol reference flag enum */ enum Reference { eNotReferenced, //!< Not yet referenced in model eReferenced, //!< Already referenced in model - eOutOfScoop, //!< Out of scoop (for loop index) }; /*! \class Symbol