diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/PosRegExp.h | 138 | 
1 files changed, 138 insertions, 0 deletions
| diff --git a/include/PosRegExp.h b/include/PosRegExp.h new file mode 100644 index 000000000..b915b1ed4 --- /dev/null +++ b/include/PosRegExp.h @@ -0,0 +1,138 @@ +#ifndef POSREGEXP_H +#define POSREGEXP_H + +#define MatchesNum 0x10 + +enum EOps +{ +  ReBlockOps = 0x1000, +  ReMul,              // * +  RePlus,             // + +  ReQuest,            // ? +  ReNGMul,            // *? +  ReNGPlus,           // +? +  ReNGQuest,          // ?? +  ReRangeN,           // {n,} +  ReRangeNM,          // {n,m} +  ReNGRangeN,         // {n,}? +  ReNGRangeNM,        // {n,m}? +  ReOr,               // | +  ReBehind  = 0x1100, // ?#n +  ReNBehind = 0x1200, // ?~n +  ReAhead   = 0x1300, // ?= +  ReNAhead  = 0x1400, // ?! + +  ReSymbolOps = 0x2000, +  ReEmpty, +  ReSymb,             // a b \W \s ... +  ReEnum,             // [] +  ReNEnum,            // [^] +  ReBrackets,         // (...) +  ReBkTrace = 0x2100, // \yN +  ReBkBrack = 0x2200 // \N +}; + +enum ESymbols +{ +  ReAnyChr = 0x4000,  // . +  ReSoL,              // ^ +  ReEoL,              // $ +  ReDigit,            // \d +  ReNDigit,           // \D +  ReWordSymb,         // \w +  ReNWordSymb,        // \W +  ReWSpace,           // \s +  ReNWSpace,          // \S +  ReUCase,            // \u +  ReNUCase ,          // \l +  ReWBound,           // \b +  ReNWBound,          // \B +  RePreNW,            // \c +  ReStart,            // \m +  ReEnd,              // \M + +  ReChr    = 0x0      // Char in Lower Byte +}; +enum ETempSymb +{ +  ReTemp = 0x7000, +  ReLBrack, ReRBrack, +  ReEnumS, ReEnumE, ReNEnumS, +  ReRangeS, ReRangeE, ReNGRangeE, ReFrToEnum +}; + +#define BackSlash '\\' + +typedef union SCharData +{ +  int  IArr[8]; +  char CArr[32]; +  void SetBit(unsigned char Bit); +  void ClearBit(unsigned char Bit); +  bool GetBit(unsigned char Bit); +} *PCharData; + +typedef struct SRegInfo +{ +  SRegInfo(); +  ~SRegInfo(); + +  EOps   Op; +  union{ +    SRegInfo *Param; +    int Symb; +    PCharData ChrClass; +  }un; +  int s,e; +  SRegInfo *Parent; +  SRegInfo *Next; +} *PRegInfo; + +typedef struct SMatches +{ +  int s[MatchesNum]; +  int e[MatchesNum]; +  int CurMatch; +} *PMatches; + +typedef class PosRegExp +{ +  PRegInfo Info; +  PMatches BkTrace; +  bool NoCase,Extend,NoMoves; +  bool Error; +  int  *Exprn; +  int  posParse; +  int  posEnd,posStart; +  int  posBkStr; +  int  FirstChar; + +  bool SetExprLow(const char *Expr); +  bool SetStructs(PRegInfo &Info,int st,int end); +  void Optimize(); +  bool CheckSymb(int Symb,bool Inc); +  bool LowParse(PRegInfo Re); +  bool LowParseRe(PRegInfo &Next); +  bool LowCheckNext(PRegInfo Re); +  bool ParseRe(int posStr); +  bool QuickCheck(); +public: +  PMatches Matches; +  int Ok, CurMatch; + +  void *param; +  char (*CharAt)(int pos, void *param); + +  PosRegExp(); +  ~PosRegExp(); + +  bool isok(); +  bool SetNoMoves(bool Moves); +  bool SetBkTrace(int posStr,PMatches Trace); +  bool SetExpr(const char *Expr); +  bool Parse(int posStr, int posStop, PMatches Mtch); +  bool Parse(int posStr,int posSol, int posEol, PMatches Mtch, int Moves = -1); +  bool Evaluate(char *Expr, int posStr, PMatches Mtch, char **Res); +} *PPosRegExp; + +#endif /* POSREGEXP_H */ | 
