v4 parser: removed bogus files
git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@982 ac1d8469-bf42-47a9-8791-bf33cf982152time-shift
parent
8cb9a7a1e2
commit
d94ebe9eb6
|
@ -1,584 +0,0 @@
|
|||
#ifndef DATATREEDEF_H
|
||||
#define DATATREEDEF_H
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
//------------------------------------------------------------------------------
|
||||
#include "VariableTable.h"
|
||||
#include "DynareBison.h"
|
||||
#include "NumericalConstants.h"
|
||||
#include "DataTree.h"
|
||||
//------------------------------------------------------------------------------
|
||||
inline int DataTree::PushToken(int iArg1,int iOpCode, int iArg2, Type iType1)
|
||||
{
|
||||
//cout << "ModeltreeSize = " << mModelTree.size() << endl;
|
||||
|
||||
//cout << "PushToken 3\n";
|
||||
MetaToken lToken(iArg1, iType1, iArg2, iOpCode);
|
||||
|
||||
if (iOpCode != NoOpCode)
|
||||
{
|
||||
lToken.op_name = operator_table.str(iOpCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
lToken.op_name = "";
|
||||
}
|
||||
lToken.reference_count.resize(current_order+1,0);
|
||||
//lToken.reference_count[current_order] = 1;
|
||||
//for (int i=0; i < current_order; i++)
|
||||
// lToken.reference_count[current_order] += lToken.reference_count[i];
|
||||
mModelTree.push_back(lToken);
|
||||
//Updating refernce counters
|
||||
if(iType1 == eTempResult && iOpCode != EQUAL)
|
||||
{
|
||||
//cout << mModelTree.size()-1 << ":" << iArg1.id << ":" << mModelTree[iArg1.id].reference_count[current_order] << endl;
|
||||
int s = mModelTree[iArg1].reference_count.size();
|
||||
for (int i = s; i <= current_order; i++)
|
||||
{
|
||||
int rc = mModelTree[iArg1].reference_count[i-1];
|
||||
mModelTree[iArg1].reference_count.push_back(rc);
|
||||
}
|
||||
mModelTree[iArg1].reference_count[current_order]++;
|
||||
//cout << mModelTree.size()-1 << ":" << iArg1.id << ":" << mModelTree[iArg1.id].reference_count[current_order] << endl;
|
||||
|
||||
}
|
||||
if(iArg2 != -1 && iOpCode != EQUAL)
|
||||
{
|
||||
//cout << mModelTree.size()-1 << ":" << iArg2.id << ":" << mModelTree[iArg2.id].reference_count[current_order] << endl;
|
||||
int s = mModelTree[iArg2].reference_count.size();
|
||||
for (int i = s; i <= current_order; i++)
|
||||
{
|
||||
int rc = mModelTree[iArg2].reference_count[i-1];
|
||||
mModelTree[iArg2].reference_count.push_back(rc);
|
||||
}
|
||||
mModelTree[iArg2].reference_count[current_order]++;
|
||||
//cout << mModelTree.size()-1 << ":" << iArg2.id << ":" << mModelTree[iArg2.id].reference_count[current_order] << endl;
|
||||
}
|
||||
int ID = mModelTree.size()-1;
|
||||
mIndexOfTokens.insert(make_pair(lToken,ID));
|
||||
//cout << "PushToken 3 : end\n";
|
||||
return ID;
|
||||
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
inline bool DataTree::Exist(MToken iToken)
|
||||
{
|
||||
map<MToken,int>::iterator iter;
|
||||
iter = mIndexOfTokens.find(iToken);
|
||||
//Testing if token exists
|
||||
if (iter == mIndexOfTokens.end()) return false;
|
||||
else return true;
|
||||
}
|
||||
inline int DataTree::AddTerminal(int iArg1, Type iType1)
|
||||
{
|
||||
if (iType1 == eTempResult)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MetaToken lToken(iArg1, iType1, -1, NoOpCode);
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
return PushToken(iArg1, NoOpCode, -1, iType1);
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddTerminal(string iArgName, int iLag)
|
||||
{
|
||||
int id;
|
||||
Type type;
|
||||
|
||||
if (!SymbolTable::Exist(iArgName))
|
||||
{
|
||||
cout << "ModelTree::AddToken : Error : Unknown symbol: " << iArgName << endl;
|
||||
exit(-1);
|
||||
}
|
||||
type = SymbolTable::getType(iArgName);
|
||||
if (type != eUNDEF)
|
||||
{
|
||||
if (type == eEndogenous ||
|
||||
type == eExogenousDet ||
|
||||
type == eExogenous ||
|
||||
type == eRecursiveVariable)
|
||||
{
|
||||
id = VariableTable::getID(iArgName,iLag);
|
||||
if (id == -1)
|
||||
{
|
||||
cout << "ModelTree::AddToken : Error : Unknown variable " << iArgName << " from VariableTable\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
id = SymbolTable::getID(iArgName);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "ModelTree::AddToken : Error : Unknown parameter: " << iArgName << endl;
|
||||
exit(-1);
|
||||
}
|
||||
return AddTerminal(id, type);
|
||||
}
|
||||
inline int DataTree::AddPlus(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, PLUS);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 && iArg2 != 0)
|
||||
{
|
||||
return PushToken(iArg1,PLUS,iArg2);
|
||||
}
|
||||
else if (iArg1 != 0)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else if (iArg2 != 0)
|
||||
{
|
||||
return iArg2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddMinus(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, MINUS);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 && iArg2 != 0)
|
||||
{
|
||||
return PushToken(iArg1,MINUS, iArg2);
|
||||
}
|
||||
else if (iArg1 != 0)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else if (iArg2 != 0)
|
||||
{
|
||||
return PushToken(iArg2, UMINUS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddUMinus(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, UMINUS);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 )
|
||||
{
|
||||
return PushToken(iArg1, UMINUS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
inline int DataTree::AddTimes(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, TIMES);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 && iArg1 != 1 && iArg2 != 0 && iArg2 != 1)
|
||||
{
|
||||
return PushToken(iArg1, TIMES, iArg2);
|
||||
}
|
||||
else if (iArg1 != 0 && iArg1 != 1 && iArg2 == 1)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else if (iArg2 != 0 && iArg2 != 1 && iArg1 == 1)
|
||||
{
|
||||
return iArg2;
|
||||
}
|
||||
else if (iArg2 == 1 && iArg1 == 1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddDivide(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, DIVIDE);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 && iArg2 != 0 && iArg2 != 1)
|
||||
{
|
||||
return PushToken(iArg1,DIVIDE,iArg2);
|
||||
}
|
||||
else if (iArg2 == 1)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else if (iArg1 == 0 && iArg2 != 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "DIVIDE 0/0 non available\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddPower(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, POWER);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0 && iArg2 != 0 && iArg2 != 1)
|
||||
{
|
||||
return PushToken(iArg1,POWER,iArg2);
|
||||
}
|
||||
else if (iArg2 == 1)
|
||||
{
|
||||
return iArg1;
|
||||
}
|
||||
else if (iArg2 == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
inline int DataTree::AddExp(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, EXP);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, EXP);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddLog(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, LOG);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0 && iArg1 != 1)
|
||||
{
|
||||
return PushToken(iArg1, LOG);
|
||||
}
|
||||
else if (iArg1 == 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "log(0) isn't available\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddLog10(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, LOG10);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0 && iArg1 != 1)
|
||||
{
|
||||
return PushToken(iArg1, LOG);
|
||||
}
|
||||
else if (iArg1 == 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "log10(0) isn't available\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddCos(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, COS);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, COS);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddSin(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, SIN);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, SIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddTan(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, TAN);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, TAN);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddACos(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ACOS);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
return PushToken(iArg1, COS);
|
||||
}
|
||||
inline int DataTree::AddASin(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ASIN);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, SIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddATan(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ATAN);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, ATAN);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddCosH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, COSH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, COSH);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddSinH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, SINH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, SINH);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddTanH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, TANH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, TANH);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddACosH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ACOSH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
return PushToken(iArg1, ACOSH);
|
||||
}
|
||||
inline int DataTree::AddASinH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ASINH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, ASINH);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddATanH(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, ATANH);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, ATANH);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddSqRt(int iArg1)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, -1, SQRT);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
if (iArg1 != 0)
|
||||
{
|
||||
return PushToken(iArg1, SQRT);
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
inline int DataTree::AddEqual(int iArg1, int iArg2)
|
||||
{
|
||||
MetaToken lToken(iArg1, eTempResult, iArg2, EQUAL);
|
||||
|
||||
if (Exist(lToken))
|
||||
{
|
||||
int ID = mIndexOfTokens[lToken];
|
||||
return ID;
|
||||
}
|
||||
return PushToken(iArg1,EQUAL,iArg2);
|
||||
}
|
||||
#endif
|
|
@ -1,110 +0,0 @@
|
|||
#ifndef DYNARE_BISON_FLEX_H
|
||||
#define DYNARE_BISON_FLEX_H
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <FlexLexer.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#include "SymbolTable.h"
|
||||
|
||||
// Parse function of 'bison' is defined externally
|
||||
extern "C" int yyparse(void *);
|
||||
|
||||
// The error function that 'bison' calls
|
||||
inline void yyerror(char const *what_error) { cerr << what_error << endl; }
|
||||
|
||||
|
||||
// Control class for a flex-scanner
|
||||
// It has a pointer to the compiler in which it is contained
|
||||
class FlexerClass//sem_flexer
|
||||
: public yyFlexLexer
|
||||
{
|
||||
public:
|
||||
FlexerClass(void *_compiler) : Compiler(_compiler) {}
|
||||
|
||||
void * getCompiler() const { return Compiler; }
|
||||
|
||||
private:
|
||||
void *Compiler;
|
||||
};
|
||||
|
||||
|
||||
// Base class for compilers which use 'flex' and 'bison' as scanner/parser
|
||||
class FlexBisonClass//flex_bison_compiler
|
||||
{
|
||||
public:
|
||||
friend int yylex(string *new_token, void *compiler);
|
||||
|
||||
FlexBisonClass() : flexer(this) {}
|
||||
|
||||
// Compiles program from a stream
|
||||
void Compile(istream &program_strm = cin)
|
||||
{
|
||||
// Tells 'flex' the right stream
|
||||
flexer.switch_streams(&program_strm, 0);
|
||||
|
||||
// If there is an error parsing the source
|
||||
if (! parse())
|
||||
{
|
||||
cerr << "How bad! A parse error has occurred!" << endl;
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// The scanner used in this compiler (it is a flex-scanner)
|
||||
FlexerClass flexer;
|
||||
|
||||
int scan() { return flexer.yylex(); }
|
||||
bool parse() { return ! yyparse((void *) this); }
|
||||
};
|
||||
|
||||
|
||||
// Directs the call from 'bison' to the scanner in the right compiler
|
||||
// "new_token" is not needed in this case...
|
||||
inline int yylex(string *new_token, void *compiler)
|
||||
{
|
||||
FlexBisonClass &what_compiler
|
||||
= *static_cast<FlexBisonClass *>(compiler);
|
||||
cout << *new_token;
|
||||
return what_compiler.scan();
|
||||
}
|
||||
|
||||
|
||||
// Definitions for 'flex' and 'bison'
|
||||
// Read the manuals of the two beasties to see what these macros mean!
|
||||
|
||||
#define yywrap() 1
|
||||
#define YY_SKIP_YYWRAP
|
||||
#define YYPARSE_PARAM parm
|
||||
#define YYLEX_PARAM parm
|
||||
#define YYSTYPE string
|
||||
|
||||
/*
|
||||
// A test compiler
|
||||
class some_compiler
|
||||
: public FlexBisonClass
|
||||
{
|
||||
public:
|
||||
void just_a_flex_test(string const &some_string) const
|
||||
{
|
||||
cout << some_string << endl;
|
||||
}
|
||||
|
||||
void just_a_bison_test() const
|
||||
{
|
||||
cout << "Cool! Even bison has found something!" << endl;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Important! These are the "shortcuts" which you can use in your
|
||||
// ".l"- and ".y"-files to access the corresponding compiler-object!
|
||||
#define my_flex_compiler (*static_cast<some_compiler *> (static_cast<FlexerClass *>(this)->getCompiler()))
|
||||
#define my_bison_compiler (*static_cast<some_compiler *> (parm))
|
||||
|
||||
*/
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue