v4 parser: removed bogus files

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@982 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
sebastien 2006-10-13 12:53:35 +00:00
parent 8cb9a7a1e2
commit d94ebe9eb6
2 changed files with 0 additions and 694 deletions

View File

@ -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

View File

@ -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