📄 rexalgorithm.h
字号:
#ifndef REX_ALGORITHM_INCLUDED_
#define REX_ALGORITHM_INCLUDED_
#pragma warning(disable:4786)
#pragma warning(disable:4503)
#include <utility>
#include <vector>
#include <set>
#include <map>
#include <string>
using namespace std;
struct REXA_DFAState{
enum{eVersion=0100}; // format mmnn m=major,n=minor
enum{eEos=-1,eNoAnswer=-2,eAccepting=-3};
REXA_DFAState(int nAnwserId=eNoAnswer,bool bIsFinal=false);
REXA_DFAState* Clone();
static void CollectStates (REXA_DFAState* pState,
set<REXA_DFAState*>& 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;
private:
REXA_DFAState(const REXA_DFAState& dfaState);
REXA_DFAState& operator=(const REXA_DFAState& dfaState);
REXA_DFAState*
CopyStates (REXA_DFAState* pState,
map<REXA_DFAState*,REXA_DFAState*>& rMapStates);
};
#if 0
$2 RegExp= Term {"|" Term}.
$3 Term= Factor {Factor}.
$4 Factor= Atom ["*"|"+"|"?"|"\n"].
$5 Atom= "[" REXA_CharSet "]" | Ident | "(" RegExp ") | ".".
$6 REXA_CharSet= <sequence of chars, metacharacters are ^(complement),-(range),
use \ as Escape for metacharacters
$7 Ident= #$[_A-Za-z][_A-Za-z0-9]*#.
#endif
enum REXA_ESymbols{
eEof=1,
eIllegal=2,
eIdent=4,
eStar=32,
ePlus=64,
eAssign=128,
eOpt=256,
eAlternative=512,
eCharSet=1024,
eLParen=2048,
eRParen=4096,
eIgnoreCase=8192
};
typedef pair<const char*,const char*> 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 ();
~REXA_Parser ();
REXA_Parser (const REXA_Parser& parserToCopy);
REXA_Parser&
operator= (const REXA_Parser& parserToCopy);
REXA_DFAState* ParseRegExp (string strRegExp);
void AddRegDefinition ( string strDefName,
string strDefExpression,
int nAnswer);
void RemoveRegDefinition ( string strDefName);
void GetRegDefinitions (vector<string>& vecDefinitions);
private:
class REXA_ParserImpl* m_pParserImp;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -