#ifndef REX_ALGORITHM_INCLUDED_ #define REX_ALGORITHM_INCLUDED_ #pragma warning(disable:4786) #pragma warning(disable:4503) #include #include #include #include using namespace std; struct REXA_DFAState{ enum{eEos=-1,eNoAnswer=-2,eAccepting=-3}; REXA_DFAState(int nAnwserId=eNoAnswer,bool bIsFinal=false); static void CollectStates (REXA_DFAState* pState, set& rsetStates); void DeleteAll(); REXA_DFAState* aNext[256]; int m_nAnwserId; bool m_bIsFinal; bool m_bIsAccepting; static REXA_DFAState* ms_pIllegalState; static REXA_DFAState* ms_pEosState; }; #if 0 $2 RegExp= Term {"|" Term}. $3 Term= Factor {Factor}. $4 Factor= Atom ["*"|"+"|"?"]. $5 Atom= "[" REXA_CharSet "]" | Ident | "(" RegExp "). $6 REXA_CharSet= REXA_BegEnd; class REXA_Exception{ public: REXA_Exception( const char* pPos, const char* pRegExp, string strMsg); REXA_Exception( REXA_ESymbols eExpectedSymbol, REXA_BegEnd token, const char* pRegExp, string strMsg=""); string m_strErrMsg; int m_nErrPos; }; class REXA_Parser{ public: REXA_Parser (char cEos=0); ~REXA_Parser (); REXA_DFAState* ParseRegExp (string strRegExp); void AddRegDefinition ( string strDefName, string strDefExpression, int nAnswer); void RemoveRegDefinition ( string strDefName); void GetRegDefinitions (vector& vecDefinitions); private: class REXA_ParserImpl* m_pParserImp; }; #endif