Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

streenode.h

Go to the documentation of this file.
00001 #ifndef _STREE_NODE_H_
00002 #define _STREE_NODE_H_
00003 
00004 #include "location.h"
00005 
00006 #include <map>
00007 #include <string>
00008 #include <set>
00009 #include <iostream>
00010 
00011 #ifndef DOXYSKIP
00012 using namespace std;
00013 #endif
00014 
00016 enum SType {
00017   SVariable, 
00018   SConstant, 
00019   SList,     
00020   SPin,      
00021   SContext   
00022 };
00023 
00024 class NameSpace;
00025 class List;
00026 
00028 class Node
00029 {
00030  protected:
00032   Location location;
00033 
00034 public:
00036   class Assignment : public map<int,const Node*>{
00037   public:
00038     ~Assignment(){
00039       iterator it = begin();
00040       iterator eit = end();
00041       while (it!=eit){
00042         delete it->second;
00043         it++;
00044       };
00045     };
00046   };
00047 
00049   class Transformer {
00050   public:
00051     virtual Node* transform(Node* node) const = 0;
00052   };
00053   
00055   class Tester {
00056   public:
00057     virtual bool test(const Node* node, const NameSpace &nameSpace) const = 0;
00058     virtual Tester* copy() const = 0;
00059     virtual Tester* substitute(const Assignment &assign) = 0;
00060     virtual ~Tester() {};
00061   };
00062 
00064   typedef set<int> VariableList;
00065   
00067   friend ostream& operator<<(ostream &os, const Assignment &data);
00068 
00070   Node(const string &icomment, const int ilineno = 0) : location(icomment,ilineno) {}
00071   
00073   Node() : location("",0) {};
00074 
00076   virtual ~Node() {};
00077 
00079   virtual SType getType() const = 0;    
00080 
00082   virtual string getName() const = 0;
00083   
00085   virtual ostream& print(ostream &os) const = 0;
00086 
00088   virtual ostream& php(ostream &os) const = 0;
00089 
00091   virtual bool match(const Node *p, Assignment &assign, const NameSpace &nameSpace) const = 0;
00092 
00094   virtual bool matchToBegining(const List *p, Assignment &assign, const NameSpace &nameSpace) const = 0;
00095 
00097   virtual bool compare(const Node *p) const = 0;
00098 
00100   virtual Node* copy() const = 0;
00101   
00103   virtual void getVariables(VariableList &vlist) const = 0;    
00104   
00106   friend ostream& operator<<(ostream &os, const Node *data);
00107   
00109   string toString() const; 
00110   
00112   virtual Node* push_back(Node *statement);
00113   
00115   virtual Node* transform(const Transformer* transformer);
00116   
00118   virtual bool forall(const Tester* tester, const NameSpace &nameSpace) const;
00119   
00121   virtual bool exists(const Tester* tester, const NameSpace &nameSpace) const;
00122 
00124   friend void substituteNode(Node* &node, const Assignment &assign);
00125 
00127   virtual string evaluate(const NameSpace &nameSpace) const = 0;
00128 
00130   virtual int getLength() const;
00131 
00132  protected:
00134   virtual Node* substitute(const Assignment &assign) = 0; 
00135 };
00136 
00137 #endif
00138 

Generated on Fri Nov 21 17:54:04 2003 for PHPX by doxygen 1.3.3