⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rexalgorithm.h

📁 关于使用正则进行词法分析的程序
💻 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 + -