Files
secondo/Algebras/CompiledExpressions/CECompiler.h
2026-01-23 17:03:45 +08:00

2173 lines
49 KiB
C++

/*
----
This file is part of SECONDO.
Copyright (C) 2004-2009, University in Hagen, Faculty of Mathematics
and Computer Science, Database Systems for New Applications.
SECONDO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
SECONDO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with SECONDO; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
----
//paragraph [10] title: [{\Large \bf ] [}]
//paragraph [21] table1column: [\begin{quote}\begin{tabular}{l}] [\end{tabular}\end{quote}]
//paragraph [22] table2columns: [\begin{quote}\begin{tabular}{ll}] [\end{tabular}\end{quote}]
//paragraph [23] table3columns: [\begin{quote}\begin{tabular}{lll}] [\end{tabular}\end{quote}]
//paragraph [24] table4columns: [\begin{quote}\begin{tabular}{llll}] [\end{tabular}\end{quote}]
//[TOC] [\tableofcontents]
//[--------] [\hline]
//characters [1] verbatim: [$] [$]
//characters [2] formula: [$] [$]
//characters [3] capital: [\textsc{] [}]
//characters [4] teletype: [\texttt{] [}]
//[ae] [\"a]
//[oe] [\"o]
//[ue] [\"u]
//[ss] [{\ss}]
//[<=] [\leq]
//[#] [\neq]
//[tilde] [\verb|~|]
//[<] [$<$]
//[>] [$>$]
[10] Header file of the CECompiler
2016/2017 H.Brieschke created the new CompiledExpression Algebra
[TOC]
1 Overview
This header file declares all classes needed for the ~CECompiler~. These are
* ~CECRuntimeError~
* the different operator tree classes ~CECOpNodeXXX~
* ~CECPtrCodeStoreType~ and ~CECPtrMap~
* ~CEGenerateFunctionStatus~
* the different visitor classes ~CECOpTreeVisitorXXX~
* ~CECompiler~
The ~CECRuntimeError~-class implements ~ERROR~-objects, which are required for the error treatment.
The ~CECOpNodeXXX~-classes implements the nodes from a operator tree, which is created from the
annotated list of the ~Secondo QueryProcessor~.
The Classes ~CECPtrCodeStoreType~ and ~CECPtrMap~ act as data stores for the ~CodeStore~-Objects
of the return types respectively the map types in the ~Map~-functions.
The ~CEGenerateFunctionStatus~-class implements various states on the progress of the code
generation, as well as other information required when using the generated shared library.
The ~CECOpTreeVisitorXXX~-classes implements the various visitor types, with which the operator tree
is traversed to collect the necessary information for code generation.
The ~CECompiler~class finally implements the concrete compiler.
2 Defines, includes, and constants
*/
#ifndef _COMPILED_EXPRESSIONS_COMPILER_H_
#define _COMPILED_EXPRESSIONS_COMPILER_H_
//define macro TRACE_ON if trace outputs are needed
//#define TRACE_ON
#undef TRACE_ON
#include <set>
#include <string>
#include <vector>
#include <exception>
#include "NestedList.h"
namespace CompiledExpressions {
// forward declarations from classes in the CompiledExpressions-namespace
class CECOpNodeApplyop;
class CECOpTreeVisitor;
class CECGImplSecondoType;
class CECGImplSecondoOperator;
class CEQuery;
class CEQueryProcessor;
class CECompiler;
class CECodeGenerator;
/*
3 Class ~CECRuntimeError~
This class implements ~ERROR~-objects, which are required for the error treatment.
*/
class CECRuntimeError : public std::exception {
public:
CECRuntimeError(std::string s);
virtual ~CECRuntimeError() throw() {}
virtual const char * what() const throw();
private:
std::string errMsg;
};
/*
4 Class ~CEGenerateFunctionStatus~
This class implements various states on the progress of the code generation, as
well as other information required when using the generated shared library.
*/
class CEGenerateFunctionStatus {
public:
/*
The Constructor.
*/
CEGenerateFunctionStatus();
/*
The Destructor.
*/
virtual ~CEGenerateFunctionStatus();
/*
A ~set~-function that can be used to store whether the code of the compiled query
was generated correctly or not.
*/
void setCodeGenerationOK(bool genCodeOK);
/*
A ~get~-function returned if the code of the compiled query was generated
correctly or not.
*/
bool isCodeGenerationOK();
/*
A ~set~-function that can be used to store whether the generated shared library is
correctly loaded or not.
*/
void setLibLoadOK(bool loadLibOK);
/*
A ~get~-function returned if the generated shared library is correctly loaded or not.
*/
bool isLibLoadOK();
/*
A ~set~-function that can be used to store the function name to be called in the
shared library.
*/
void setCallLibFunctionName(std::string libFuncName);
/*
A ~get~-function returned the function name to be called in the shared library.
*/
std::string getCallLibFunctionName();
/*
This function calls the ~CEQueryProcessor~ to load the generated shared library and
saved the nested list with the memory address of the function in the shared library.
*/
void loadCELibFunction(CEQuery* ptrCEQY,
ListExpr& returnType)
/*throw (CECRuntimeError)*/;
/*
A ~get~-function returned a nested list with the memory address of the function in
the shared library.
*/
ListExpr& getCELibFunctionAddressNList()
/*throw (CECRuntimeError)*/;
private:
int generateStatus;
std::string ceCallLibFunctionName;
ListExpr libFunctionAddress;
/*
A enumeration with the various statics of the generated shared library.
*/
enum CEGenerateCompiledExpression {
CEC_GCE_UNDEF,
CEC_GCE_GENCODE,
CEC_GCE_LOADLIB,
CEC_GCE_ERROR
};
}; //end of class CEGenerateFunctionStatus
/*
5 Class ~CECOpNode~
This class is the base class of all nodes of the ~CECompiler Operator Tree~.
In this class all functions that are required for all node types are implemented.
*/
class CECOpNode {
public:
/*
A static function to create the ~CECompiler Operator Tree~.
*/
static CECOpNode* createCECOpTree(ListExpr& expr,
CECOpNode* father)
/*throw (CECRuntimeError)*/;
/*
The Destructor.
*/
virtual ~CECOpNode();
/*
This function constructs another tree structure within the tree,
but it contains only ~CECOpNodeApplyop~-nodes.
*/
virtual void createApplyopTree(CECOpNodeApplyop* fatherNode,
CECOpNodeApplyop*& rootNodes);
/*
A ~get~-function returned ~TRUE~ or ~FALSE~ if the generation of the code is implemented
for the respective node.
*/
bool getIsCECImplementedCodeGeneration(bool onlyTrue);
/*
A ~get~-function returned the integer from the enumeration ~CECTruthValues~, which
indicates if the generation of the code is implemented for the respective node.
*/
int getIsCECImplementedCodeGeneration();
/*
A ~set~-function that checks whether the node is an operator, and if so,
whether it is also implemented in the ~Compiled Expressions Algebra~.
*/
virtual void checkIsCEAOperator(bool force = false);
/*
A ~get~-function returned ~TRUE~ or ~FALSE~ if the node is a operator,
that is also implemented in the ~Compiled Expressions Algebra~.
*/
virtual bool getIsCEAOperator(bool onlyTrue);
/*
A ~get~-function returned the integer from the enumeration ~CECTruthValues~,
if the node is a operator, that is also implemented in the ~Compiled Expressions Algebra~.
*/
int getIsCEAOperator();
/*
A ~set~-function that checks whether the node is the root node from the compiled expression.
*/
virtual void checkIsCERootNode(bool force = false);
/*
A ~set~-function that delete the root node entry for the node.
*/
void unsetIsCERootNodeNoCECOpNodeRoot();
/*
A ~get~-function returned ~TRUE~ or ~FALSE~ if the node is the root node from the
compiled expression.
*/
bool getIsCERootNode(bool onlyTrue);
/*
A ~get~-function returned the integer from the enumeration ~CECTruthValues~,
if the node is the root node from the compiled expression.
*/
int getIsCERootNode();
/*
This function generates a unique function name, which is used in the shared library
to be generated.
*/
virtual std::string generateCECallLibFunctionName(int idxCERootNode);
/*
A ~set~-function that checks to which form the annotated list, associated with the node,
must be converted for the ~Secondo QueryProcessor~.
*/
virtual void checkCECGenerateAnnotateList();
/*
A ~get~-function returned the integer from the enumeration ~CECGenerateAnnotateList~,
to which form the annotated list, associated with the node, must be converted for
the ~Secondo QueryProcessor~.
*/
int getCECGenerateAnnotateList();
/*
A ~get~-function returned the position number in the vector of sons in the father node.
*/
int getSonsPosition();
/*
The function converts the annotated list from the node into a form that
the ~Secondo QueryProcessor~ can process.
*/
virtual void generateCEAnnotateList();
/*
A ~get~-function returned nested list with the return type of the node.
*/
virtual ListExpr getListReturnType();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
*/
virtual void accept(CECOpTreeVisitor&);
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
*/
virtual void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
/*
A ~get~-function returned the number of sons.
*/
unsigned int getNumSons();
/*
A ~set~-function sets the unique node number as string representation.
*/
void setStrNodeNumber(int nodeNum);
/*
A ~get~-function returned if the node number is already set.
*/
bool isSetNodeNumber();
/*
A ~get~-function returned the string with the unique node key.
*/
std::string getStrNodeKey();
/*
A ~get~-function returned a pointer to the fathernode.
*/
CECOpNode* getPtrFatherNode();
/*
A ~get~-function returned a pointer to the sonnode at the position ~posSon~.
*/
CECOpNode* getPtrSonNode(const unsigned int posSon)
/*throw (CECRuntimeError)*/;
/*
A enumeration with the various truth values that are used in the nodes.
*/
enum CECTruthValues {
CEC_TV_UNDEF,
CEC_TV_CANDIDATE_FALSE,
CEC_TV_FALSE,
CEC_TV_CANDIDATE_TRUE,
CEC_TV_TRUE
};
/*
A enumeration with the various values in which form the annotated list from the
node are converted.
*/
enum CECGenerateAnnotateList {
CEC_GAL_UNDEF,
CEC_GAL_ORIG_OP,
CEC_GAL_CEA_OP,
CEC_GAL_CEA_CQOP
};
protected:
/*
Different local variables...
*/
std::vector<CECOpNode*> sons;
ListExpr ceAnnotateList;
CECOpNode* ptrFatherNode;
int isCECCodeGenerationImplemented;
int isCEAOperator;
int isCERootNode;
int cecGenerateAnnotateList;
std::string strNodeNumber;
std::string strNodeType;
/*
The Constructors.
*/
CECOpNode() {};
CECOpNode(ListExpr& list,
CECOpNode* fatherNode,
std::string nodeType);
/*
This function checks the correct form of the annotated list from the node.
*/
virtual bool checkNListStructureOK();
/*
A ~set~-function for the member variable, if the generation of the code is implemented for
the respective node.
*/
virtual void setIsCECImplementedCodeGeneration();
/*
A ~set~-function for the member variable, if the respective node an operator from
the ~Compiled Expressions Algebra~.
*/
virtual void setIsCEAOperator();
/*
A ~set~-function for the member variable, if the respective node a root node
of any compiled expression.
*/
virtual void setIsCERootNode();
/*
A ~set~-function for the member variable, to which form the annotated list,
associated with the node, must be converted for the ~Secondo QueryProcessor~.
*/
virtual void setCECGenerateAnnotateList();
/*
A ~get~-function returned the position number of the node ~node~ in the vector of sons.
*/
int searchSonsPosition(CECOpNode* node);
}; //end of class CECOpNode
/*
6 Class ~CECPtrCodeStoreType~
This class implements a data store for the ~CECGImplXXXTypeXXX~-Objects
of the return types from the nodes.
*/
class CECPtrCodeStoreType {
public:
/*
The Destructor
*/
virtual ~CECPtrCodeStoreType() {}
/*
A ~get~-function returned a pointer to the ~CECGImplXXXTypeXXX~-Objects
of the return types from the nodes.
*/
CECGImplSecondoType* getPtrCodeStoreType();
/*
A ~get~-function returned a pointer to the ~CECGImplXXXTypeXXX~-Objects
of the return subtypes from the nodes.
*/
CECGImplSecondoType* getPtrSubCodeStoreType();
/*
A ~get~-function returned if the return type of the node is a stream.
*/
bool getIsStreamType();
protected:
/*
Different local variables...
*/
CECGImplSecondoType* ptrCodeStoreType;
CECGImplSecondoType* ptrSubCodeStoreType;
/*
The Constructor
*/
CECPtrCodeStoreType();
/*
A ~set~-function saved the pointer to the ~CECGImplXXXTypeXXX~-Objects
of the return type and return subtype from the node.
*/
void setPtrCodeStoreType(ListExpr& list);
/*
A ~set~-function saved the integer from the enumeration ~CECTruthValues~, which
indicates if the generation of the code of the return type is implemented for the
respective node.
*/
void setIsCECImplSecondoType(int& retValue, bool force);
/*
This function added the pointer to the ~CECGImplXXXTypeXXX~-Objects of the
return type to the signature vector ~sVector~.
*/
void addCSTtoSignatureVector(std::vector<CECGImplSecondoType*>& sVector);
private:
/*
Other local variables...
*/
bool isSetPtrCodeStoreType;
bool isStreamType;
}; //end of class CECPtrCodeStoreType
/*
7 Class ~CECPtrMap~
This class implements a data store for the ~CECGImplXXXTypeXXX~-Objects
of the map types in the ~Map~-functions from the node.
*/
class CECPtrMap {
public:
/*
The Destructor
*/
virtual ~CECPtrMap();
/*
A ~get~-function returned a vector of pointers to the ~CECGImplXXXTypeXXX~-Objects
of the map types from the nodes.
*/
std::vector<CECGImplSecondoType*> getVectorPtrCodeStoreTypes();
protected:
/*
A local variable
*/
std::vector<CECGImplSecondoType*> ptrCodeStoreTypes;
/*
The Constructor
*/
CECPtrMap();
/*
A ~set~-function saved the pointers to the ~CECGImplXXXTypeXXX~-Objects
of the map types from the node.
*/
void setVectorPtrCodeStoreTypes(ListExpr& list);
/*
A ~set~-function saved the integer from the enumeration ~CECTruthValues~, which
indicates if the generation of the code of the map types are implemented for the
respective node.
*/
void setIsCECImplSecondoTypes(int& retValue, bool force);
private:
/*
A other local variable...
*/
bool isSetVectorPtrCodeStoreTypes;
}; //end of class CECPtrMap
/*
8 Class ~CECOpNodeOperator~
This class is a subclass of ~CECOpNode~. It implements the node that is formed
from the following annotated list:
----
((<name> operator <opID> <algID>) typeerror)
----
*/
class CECOpNodeOperator : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodeOperator(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeOperator();
/*
A ~get~-function returned a pointer to the ~CECGImplXXXOperatorXXX~-Object
from the nodes.
*/
CECGImplSecondoOperator* getPtrCodeStoreOperator();
/*
A ~set~-function that checks whether the node is an operator, and if so,
whether it is also implemented in the ~Compiled Expressions Algebra~.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkIsCEAOperator(bool force = false);
/*
This function generates a unique function name, which is used in the shared library
to be generated.
This function overrides the function of the base class ~CECOpNode~.
*/
std::string generateCECallLibFunctionName(int idxCERootNode);
/*
A ~set~-function that checks to which form the annotated list, associated with the node,
must be converted for the ~Secondo QueryProcessor~.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkCECGenerateAnnotateList();
/*
The function converts the annotated list from the node into a form that
the ~Secondo QueryProcessor~ can process.
This function overrides the function of the base class ~CECOpNode~.
*/
void generateCEAnnotateList();
/*
This function generate and returned a unique name of the operator.
*/
std::string getOperatorName();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
A ~get~-function returned a string with the algebra ID of the operator.
*/
std::string getAlgId();
/*
A ~get~-function returned a string with the operator ID of the operator.
*/
std::string getOpId();
/*
A ~get~-function returned a vector with pointers of ~CECGImplSecondoTypeXXX~-objects
so that the vector contains the complete return types as the signature of the operator.
*/
std::vector<CECGImplSecondoType*> getSignatureVector();
private:
/*
Different local variables...
*/
ListExpr listAlgID;
ListExpr listOpFunID;
CECGImplSecondoOperator* ptrCodeStoreOperator;
/*
The Standard Constructor
*/
CECOpNodeOperator() {};
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
/*
A ~set~-function for the member variable, if the generation of the code is implemented for
the respective node.
This function overrides the function of the base class ~CECOpNode~.
*/
void setIsCECImplementedCodeGeneration();
/*
A ~set~-function for the member variable, if the respective node an operator from
the ~Compiled Expressions Algebra~.
This function overrides the function of the base class ~CECOpNode~.
*/
void setIsCEAOperator();
}; //end of class CECOpNodeOperator
/*
9 Class ~CECOpNodeApplyop~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((none applyop (ann(op) ann(arg1) ... ann(argn)))
<resulttype>
<opFunId>)
----
*/
class CECOpNodeApplyop : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeApplyop(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeApplyop();
/*
This function constructs another tree structure within the tree,
but it contains only ~CECOpNodeApplyop~-nodes.
This function overrides the function of the base class ~CECOpNode~.
*/
void createApplyopTree(CECOpNodeApplyop* fatherNode,
CECOpNodeApplyop*& rootNodes);
/*
A ~set~-function that checks whether the node is an operator, and if so,
whether it is also implemented in the ~Compiled Expressions Algebra~.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkIsCEAOperator(bool force = false);
/*
A ~set~-function that checks whether the node is the root node from the compiled expression.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkIsCERootNode(bool force = false);
/*
A ~get~-function returned a pointer to the ~CEGenerateFunctionStatus~-object of the node.
*/
CEGenerateFunctionStatus* getInstCEGenerateFunctionStatus();
/*
A ~set~-function to save a pointer to the ~CECompiler~-object.
*/
void setPtrCECompiler(CECompiler* cec);
/*
This function generates a unique function name, which is used in the shared library
to be generated.
This function overrides the function of the base class ~CECOpNode~.
*/
std::string generateCECallLibFunctionName(int idxCERootNode);
/*
A ~set~-function that checks to which form the annotated list, associated with the node,
must be converted for the ~Secondo QueryProcessor~.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkCECGenerateAnnotateList();
/*
The function converts the annotated list from the node into a form that
the ~Secondo QueryProcessor~ can process.
This function overrides the function of the base class ~CECOpNode~.
*/
void generateCEAnnotateList();
/*
This function generate and returned a unique name of the operator.
*/
std::string getOperatorName();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
//std::string generateOperatorFunctionSignatur();
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
Different local variables...
*/
std::vector<CECOpNodeApplyop*> applyopSons;
CECOpNodeApplyop* ptrApplyopFatherNode;
ListExpr listOpFunID;
CECompiler* ptrCEC;
CEGenerateFunctionStatus* ptrCEGenFuncStat;
/*
The Standard Constructor
*/
CECOpNodeApplyop() {};
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
/*
A ~set~-function for the member variable, if the respective node an operator from
the ~Compiled Expressions Algebra~.
This function overrides the function of the base class ~CECOpNode~.
*/
void setIsCEAOperator();
/*
This function added the node in the ~Applyop Node Tree~.
*/
void addApplyopSon(CECOpNodeApplyop& son);
}; //end of class CECOpNodeApplyop
/*
10 Class ~CECOpNodeAbstraction~
This class is a subclass of ~CECOpNode~ and ~CECPtrMap~. It implements
the node that is formed from the following annotated list:
----
((none abstraction Annotate(expr) <functionno>) <type>)
----
*/
class CECOpNodeAbstraction : public CECOpNode, public CECPtrMap {
public:
/*
The Constructor
*/
CECOpNodeAbstraction(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeAbstraction();
/*
A ~set~-function that checks whether the node is the root node from the compiled expression.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkIsCERootNode(bool force = false);
/*
A ~get~-function returned a pointer to the ~CEGenerateFunctionStatus~-object of the node.
*/
CEGenerateFunctionStatus* getInstCEGenerateFunctionStatus();
/*
This function replaces the annotated list of the node with an empty list.
*/
void deleteCEAnnotateList();
/*
This function generates a unique function name, which is used in the shared library
to be generated.
This function overrides the function of the base class ~CECOpNode~.
*/
std::string generateCECallLibFunctionName(int idxCERootNode);
/*
This function generate and returned a unique name of the operator.
*/
std::string getOperatorName();
/*
A ~get~-function returned nested list with the return type of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
ListExpr getListReturnType();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function returned a string with the function nuber of the abstraction function.
*/
std::string getStrFunctionNo();
private:
/*
A local variable...
*/
CEGenerateFunctionStatus* ptrCEGenFuncStat;
/*
The Standard Constructor
*/
CECOpNodeAbstraction();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeAbstraction
/*
11 Class ~CECOpNodeObject~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((<object name> object <index>) <type>)
----
*/
class CECOpNodeObject : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeObject(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeObject();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function returned a string with the index of the represented object in the array of values
from the ~Secondo QueryProcessor~.
*/
std::string getQPValueIdx();
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
The Standard Constructor
*/
CECOpNodeObject();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeObject
/*
12 Class ~CECOpNodeConstant~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((<value> constant <index>) <type>)
----
*/
class CECOpNodeConstant : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeConstant(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeConstant();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function returned a string with the index of the represented object in the array of values
from the ~Secondo QueryProcessor~.
*/
std::string getQPValueIdx();
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
The Standard Constructor
*/
CECOpNodeConstant();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeConstant
/*
13 Class ~CECOpNodeVariable~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((<var name> variable <position> <functionno>) <type>)
----
*/
class CECOpNodeVariable : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeVariable(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeVariable();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
/*
This function returned if the represented variable is a stream.
*/
bool isStreamElem();
/*
This function returned if the represented variable is a tuple.
*/
bool isTupleElem();
/*
This function returned a string with the position of the represented variable in the array of values
from the ~Secondo QueryProcessor~.
*/
std::string getStrVarPosition();
private:
/*
The Standard Constructor
*/
CECOpNodeVariable();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeVariable
/*
14 Class ~CECOpNodeIdentifier~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
((<ident> identifier) <ident>)
----
*/
class CECOpNodeIdentifier : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodeIdentifier(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeIdentifier();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodeIdentifier();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeIdentifier
/*
15 Class ~CECOpNodeArglist~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
((none arglist (ann(t1) ann(t2) ... ann(tn)))
(type(t1) type(t2) ... type(tn)))
----
*/
class CECOpNodeArglist : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodeArglist(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeArglist();
/*
A ~get~-function returned ~TRUE~ or ~FALSE~ if the node is a operator,
that is also implemented in the ~Compiled Expressions Algebra~.
This function overrides the function of the base class ~CECOpNode~.
*/
bool getIsCEAOperator(bool onlyTrue);
/*
This function generates a unique function name, which is used in the shared library
to be generated.
This function overrides the function of the base class ~CECOpNode~.
*/
std::string generateCECallLibFunctionName(int idxCERootNode);
/*
A ~set~-function that checks to which form the annotated list, associated with the node,
must be converted for the ~Secondo QueryProcessor~.
This function overrides the function of the base class ~CECOpNode~.
*/
void checkCECGenerateAnnotateList();
/*
The function converts the annotated list from the node into a form that
the ~Secondo QueryProcessor~ can process.
This function overrides the function of the base class ~CECOpNode~.
*/
void generateCEAnnotateList();
/*
This function returned if the function in the generated shared library in that this
node inserted are correctly loaded.
*/
bool searchCELibFuncLoadOK();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodeArglist();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeArglist
/*
16 Class ~CECOpNodeFunction~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((none function <functionlist>) <resulttype>)
----
*/
class CECOpNodeFunction : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeFunction(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeFunction();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
The Standard Constructor
*/
CECOpNodeFunction();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeFunction
/*
17 Class ~CECOpNodeApplyabs~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((none applyabs (ann(abstraction) ann(arg1) ... ann(argn)))
<resulttype>)
----
*/
class CECOpNodeApplyabs : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeApplyabs(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeApplyabs();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
The Standard Constructor
*/
CECOpNodeApplyabs();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeApplyabs
/*
18 Class ~CECOpNodeApplyfun~
This class is a subclass of ~CECOpNode~ and ~CECPtrCodeStoreType~. It implements
the node that is formed from the following annotated list:
----
((none applyfun (ann(function) ann(arg1) ... ann(argn)))
<resulttype>)
----
*/
class CECOpNodeApplyfun : public CECOpNode, public CECPtrCodeStoreType {
public:
/*
The Constructor
*/
CECOpNodeApplyfun(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeApplyfun();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
/*
This function fill in the vector ~sVector~ pointer from
the ~CECGImplSecondoTypeXXX~-objects so that the vector contains the complete
return types as the signature of the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void getSignatureVector(std::vector<CECGImplSecondoType*>& sVector,
bool callRecursiv);
private:
/*
The Standard Constructor
*/
CECOpNodeApplyfun();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeApplyfun
/*
19 Class ~CECOpNodeCounterdef~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
((none counterdef <idx> ann(subexpr))
<resulttype>)
----
*/
class CECOpNodeCounterdef : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodeCounterdef(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeCounterdef();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodeCounterdef();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeCounterdef
/*
20 Class ~CECOpNodePointer~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
(pointer <memorx address>)
----
*/
class CECOpNodePointer : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodePointer(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodePointer();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodePointer();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodePointer
/*
21 Class ~CECOpNodePredinfodef~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
((none predinfodef 0.012 0.1442 ann(subexpr))
<resulttype>)
----
*/
class CECOpNodePredinfodef : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodePredinfodef(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodePredinfodef();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodePredinfodef();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodePredinfodef
/*
22 Class ~CECOpNodeMemorydef~
This class is a subclass of ~CECOpNode~. It implements
the node that is formed from the following annotated list:
----
((none memorydef 512 ann(subexpr))
<resulttype>)
----
*/
class CECOpNodeMemorydef : public CECOpNode {
public:
/*
The Constructor
*/
CECOpNodeMemorydef(ListExpr& list, CECOpNode* fatherNode);
/*
The Destructor
*/
virtual ~CECOpNodeMemorydef();
/*
This function handles all ~CECOpTreeVisitorXXX~-objects who visit the node.
This function overrides the function of the base class ~CECOpNode~.
*/
void accept(CECOpTreeVisitor&);
private:
/*
The Standard Constructor
*/
CECOpNodeMemorydef();
/*
This function checks the correct form of the annotated list from the node.
This function overrides the function of the base class ~CECOpNode~.
*/
bool checkNListStructureOK();
}; //end of class CECOpNodeMemorydef
/*
23 Class ~CECOpTreeVisitor~
This class is a abstract base class for all vistor classes with which the operator tree
is traversed to collect the necessary information for code generation.
*/
class CECOpTreeVisitor {
public:
/*
The Constructor
*/
CECOpTreeVisitor() {};
/*
The Destructor
*/
virtual ~CECOpTreeVisitor() {};
/*
The following functions are the abstract functions, in which the respective behavior
for the specific ~CECOpTreeVisitorXXX~ will implemented for the specific visitors for each
node type of the operator tree.
*/
virtual void visit(CECOpNode&) = 0;
virtual void visit(CECOpNodeOperator&) = 0;
virtual void visit(CECOpNodeApplyop&) = 0;
virtual void visit(CECOpNodeAbstraction&) = 0;
virtual void visit(CECOpNodeObject&) = 0;
virtual void visit(CECOpNodeConstant&) = 0;
virtual void visit(CECOpNodeVariable&) = 0;
virtual void visit(CECOpNodeIdentifier&) = 0;
virtual void visit(CECOpNodeArglist&) = 0;
virtual void visit(CECOpNodeFunction&) = 0;
virtual void visit(CECOpNodeApplyabs&) = 0;
virtual void visit(CECOpNodeApplyfun&) = 0;
virtual void visit(CECOpNodeCounterdef&) = 0;
virtual void visit(CECOpNodePointer&) = 0;
virtual void visit(CECOpNodePredinfodef&) = 0;
virtual void visit(CECOpNodeMemorydef&) = 0;
}; //end of class CECOpTreeVisitor
/*
24 Class ~CECOpTreeVisitorModifyAnnotateListFormQP~
This class is a subclass of ~CECOpTreeVisitor~. This visitor traversed the operator tree
and modified the annotate list in the format of the ~Secondo QueryProcessor~.
*/
class CECOpTreeVisitorModifyAnnotateListFormQP : public CECOpTreeVisitor {
public:
/*
The Constructor
*/
CECOpTreeVisitorModifyAnnotateListFormQP();
/*
The Destructor
*/
~CECOpTreeVisitorModifyAnnotateListFormQP();
/*
The following functions implement the visitor's behavior for each node type of the operator tree.
These functions implement the abstract functions of the base class ~CECOpTreeVisitor~.
*/
void visit(CECOpNode&);
void visit(CECOpNodeOperator&);
void visit(CECOpNodeApplyop&);
void visit(CECOpNodeAbstraction&);
void visit(CECOpNodeObject&);
void visit(CECOpNodeConstant&);
void visit(CECOpNodeVariable&);
void visit(CECOpNodeIdentifier&);
void visit(CECOpNodeArglist&);
void visit(CECOpNodeFunction&);
void visit(CECOpNodeApplyabs&);
void visit(CECOpNodeApplyfun&);
void visit(CECOpNodeCounterdef&);
void visit(CECOpNodePointer&);
void visit(CECOpNodePredinfodef&);
void visit(CECOpNodeMemorydef&);
}; //end of class CECOpTreeVisitorModifyAnnotateListFormQP
/*
25 Class ~CECOpTreeVisitorSearchCompiledExpressionRoot~
This class is a subclass of ~CECOpTreeVisitor~. This visitor traversed the operator tree
and searched for all nodes that represent a root node of a compiled expressions.
*/
class CECOpTreeVisitorSearchCompiledExpressionRoot : public CECOpTreeVisitor {
public:
/*
The Constructor
*/
CECOpTreeVisitorSearchCompiledExpressionRoot();
/*
The Destructor
*/
~CECOpTreeVisitorSearchCompiledExpressionRoot();
/*
The following functions implement the visitor's behavior for each node type of the operator tree.
These functions implement the abstract functions of the base class ~CECOpTreeVisitor~.
*/
void visit(CECOpNode&);
void visit(CECOpNodeOperator&);
void visit(CECOpNodeApplyop&);
void visit(CECOpNodeAbstraction&);
void visit(CECOpNodeObject&);
void visit(CECOpNodeConstant&);
void visit(CECOpNodeVariable&);
void visit(CECOpNodeIdentifier&);
void visit(CECOpNodeArglist&);
void visit(CECOpNodeFunction&);
void visit(CECOpNodeApplyabs&);
void visit(CECOpNodeApplyfun&);
void visit(CECOpNodeCounterdef&);
void visit(CECOpNodePointer&);
void visit(CECOpNodePredinfodef&);
void visit(CECOpNodeMemorydef&);
/*
A ~set~-function that saved a found root node in a local data structure.
*/
void setCECOpTreeRootNode(CECOpNode& node);
/*
A ~get~-function returned the ~idx~'th root node.
*/
CECOpNodeAbstraction* getRootNode(unsigned int idx);
/*
This function returned the number of found root node.
*/
int sizeRootNodes();
private:
/*
Different local variables...
*/
std::vector<CECOpNodeAbstraction*> rootNodes;
CECOpNode* cecOpTreeRootNode;
}; //end of class CECOpTreeVisitorSearchCompiledExpressionRoot
/*
26 Class ~CECOpTreeVisitorNumberingCECOpNodes~
This class is a subclass of ~CECOpTreeVisitor~. This visitor traversed the operator tree
and assigns a unique number to each node. This number will be used for the generation of
unique class names in code generation phase.
*/
class CECOpTreeVisitorNumberingCECOpNodes : public CECOpTreeVisitor {
public:
/*
The Constructor
*/
CECOpTreeVisitorNumberingCECOpNodes();
/*
The Destructor
*/
~CECOpTreeVisitorNumberingCECOpNodes();
/*
The following functions implement the visitor's behavior for each node type of the operator tree.
These functions implement the abstract functions of the base class ~CECOpTreeVisitor~.
*/
void visit(CECOpNode&);
void visit(CECOpNodeOperator&);
void visit(CECOpNodeApplyop&);
void visit(CECOpNodeAbstraction&);
void visit(CECOpNodeObject&);
void visit(CECOpNodeConstant&);
void visit(CECOpNodeVariable&);
void visit(CECOpNodeIdentifier&);
void visit(CECOpNodeArglist&);
void visit(CECOpNodeFunction&);
void visit(CECOpNodeApplyabs&);
void visit(CECOpNodeApplyfun&);
void visit(CECOpNodeCounterdef&);
void visit(CECOpNodePointer&);
void visit(CECOpNodePredinfodef&);
void visit(CECOpNodeMemorydef&);
private:
/*
A local variable...
*/
int nextNodeNumber;
}; //end of class CECOpTreeVisitorNumberingCECOpNodes
/*
27 Class ~CECOpTreeVisitorCopyCECOpNodesResultTypeToCEQY~
This class is a subclass of ~CECOpTreeVisitor~. This visitor traversed the operator tree
and copies the annotated list of the return types from each node to the ~CEQuery~-object.
*/
class CECOpTreeVisitorCopyCECOpNodesResultTypeToCEQY
: public CECOpTreeVisitor {
public:
/*
The Constructor
*/
CECOpTreeVisitorCopyCECOpNodesResultTypeToCEQY();
/*
The Destructor
*/
~CECOpTreeVisitorCopyCECOpNodesResultTypeToCEQY();
/*
The following functions implement the visitor's behavior for each node type of the operator tree.
These functions implement the abstract functions of the base class ~CECOpTreeVisitor~.
*/
void visit(CECOpNode&);
void visit(CECOpNodeOperator&);
void visit(CECOpNodeApplyop&);
void visit(CECOpNodeAbstraction&);
void visit(CECOpNodeObject&);
void visit(CECOpNodeConstant&);
void visit(CECOpNodeVariable&);
void visit(CECOpNodeIdentifier&);
void visit(CECOpNodeArglist&);
void visit(CECOpNodeFunction&);
void visit(CECOpNodeApplyabs&);
void visit(CECOpNodeApplyfun&);
void visit(CECOpNodeCounterdef&);
void visit(CECOpNodePointer&);
void visit(CECOpNodePredinfodef&);
void visit(CECOpNodeMemorydef&);
/*
This function copies the annotated list of the return types from each node to
the ~CEQuery~-object.
*/
void setCEQuery(CEQuery* ceQY);
private:
CEQuery* ptrCEQY;
}; //end of class CECOpTreeVisitorCopyCECOpNodesResultTypeToCEQP
/*
28 Class ~CECompiler~
This class implements the concrete compiler. The class is a singleton.
*/
class CECompiler {
public:
/*
This static function returned a pointer of the ~CECompiler~-instance.
If no instance has been created, the function creates an instance.
*/
static CECompiler* getInstance();
/*
This static function deleted the ~CECompiler~-instance.
*/
static void deleteInstance();
/*
The Destructor
*/
virtual ~CECompiler();
/*
This function is the central function of the ~CECompiler~ in which the
shared library is generated from the annotated list and loaded via
the ~CEQueryProcessor~.
*/
void ceGenerateQuery(ListExpr& annotateListCE, CEQuery* ptrCEQY);
private:
/*
A static pointer variable...
*/
static CECompiler* instance;
/*
The Constructor
*/
CECompiler();
/*
This function is called as soon as something is wrong during the creation or loading
of the shared library. The annotated list is then changed to the format of
the ~Secondo QueryProcessor~ so that the ~Secondo QueryProcessor~ can process the query
without the functionality of the ~Compiled Expressions Algebra~.
*/
void resetAnnotateListToOrigForm(ListExpr& list, bool output);
}; // end of class CECompiler
} // end of namespace CompiledExpressions
#endif // _COMPILED_EXPRESSIONS_COMPILER_H_