Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

VRegExpr.hpp

Go to the documentation of this file.
00001 #include "LabelDict.hpp"
00002 #include "MemStreamer.hpp"
00003 
00004 class FSMState;
00005 class FSM;
00006 
00007 extern MemStreamer *vregexprmem; // Identifiers the global memory
00008                                  // that is used to storing all regular expressions
00009                                  // In the current version, this is simply 'tmpmem'
00010 
00011 //*************************************************************************************
00012 //*************************************************************************************
00013 
00014 #define VP_ITEMTYPE_LABEL     0
00015 #define VP_ITEMTYPE_DONTCARE  1
00016 #define VP_ITEMTYPE_POUND     12
00017 #define VP_ITEMTYPE_STAR      2
00018 #define VP_ITEMTYPE_PLUS      3
00019 #define VP_ITEMTYPE_OPT       4
00020 #define VP_ITEMTYPE_NOT       5
00021 #define VP_ITEMTYPE_EMPTY     6
00022 #define VP_ITEMTYPE_GROUP     7
00023 
00024 #define VP_ITEMTYPE_MINUS     8
00025 #define VP_ITEMTYPE_SEQ       9
00026 #define VP_ITEMTYPE_ALT       10
00027 #define VP_ITEMTYPE_AND       11
00028 
00029 
00030 #define MAX_LEN   ((unsigned short)65535)
00031 
00032 class VRegExpr
00033 {
00034    unsigned       type:5;           // The type of regular expression
00035 
00036    union{
00037       TLabelID       labelid;       // The regular expression could be a label
00038       struct                        // Or a pair of two children
00039       {
00040          VRegExpr    *child1;
00041          VRegExpr    *child2;
00042       }  children;
00043    };
00044 
00045    void CreateFSMEdges(FSM *fsm,FSMState *fromstate,FSMState *tostate);
00046 
00047 public:
00048    void *operator new(size_t size)  {  return vregexprmem->GetByteBlock(size);  }
00049    void operator delete(void *ptr)  {}
00050 
00051    VRegExpr(TLabelID mylabelid)
00052    {
00053       type=VP_ITEMTYPE_LABEL;
00054       labelid=mylabelid;
00055    }
00056 
00057    VRegExpr(int mytype,VRegExpr *child1=NULL,VRegExpr *child2=NULL)
00058    {
00059       type=mytype;
00060       children.child1=child1;
00061       children.child2=child2;
00062    }
00063 
00064    void PrintLabelList();
00065    void Print();
00066 
00067    FSM *CreateNonDetFSM();
00068    FSM *CreateFSM();
00069 
00070    static TLabelID ParseLabel(char **str,char *endptr);
00071    static VRegExpr *ParseVRegExpr(char * &str,char *endptr);
00072 };
00073 
00074 //************************************************************************************
00075 //************************************************************************************

Generated on Sat Oct 13 16:08:41 2001 for XMILL by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001