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

📄 ggrammar.h

📁 一个非常有用的开源代码
💻 H
字号:
/*	Copyright (C) 2006, Mike Gashler	This library is free software; you can redistribute it and/or	modify it under the terms of the GNU Lesser General Public	License as published by the Free Software Foundation; either	version 2.1 of the License, or (at your option) any later version.	see http://www.gnu.org/copyleft/lesser.html*/#ifndef __GGRAMMAR_H__#define __GGRAMMAR_H__#include "GMacros.h"//class GHash;class GGrammarRule;class GParseTreeNode;class GLList;class GStream;class GStructureParseTreeNode;class GListParseTreeNode;class GPointerArray;class GGrammar{protected://	GHash* m_pRules;	GGrammarRule* m_pRoot;public:	GGrammar();	virtual ~GGrammar();};class GGrammarRule{public:	GGrammarRule();	virtual ~GGrammarRule();	enum PARSE_ERRORS	{		PE_NO_ERROR,		PE_NEED_MORE_DATA,		PE_EXPECTED_SOMETHING_ELSE,	};	virtual void Flush();	// **** PURE VIRTUAL METHODS ***	virtual GParseTreeNode* Parse(GStream* pStream) = 0;protected:	GPointerArray* m_pPTNStack;	int m_nStackBase;	// **** Static variables ***	static PARSE_ERRORS s_nLastError;	bool IsSame(char c1, char c2) { return((UCHAR(c1) == UCHAR(c2)) ? true : false); } // So you can turn case sensitivity on or off by rewriting this method	bool IsWhiteSpace(char c) { return((c <= 32 && c > 0) ? true : false); }	bool IsNumber(char c) { return((c >= '0' && c <= '9') ? true : false); }	bool IsAlpha(char c) { return(( (c >= 'a' && c <= 'z') ||									(c >= 'A' && c <= 'Z') ||									(c == '_')									) ? true : false); }	bool IsAlphaNumeric(char c) { return(IsAlpha(c) || IsNumber(c)); }	void EatWhiteSpace(GStream* pStream);	GParseTreeNode* GetParseTreeNode();	void SetParseTreeNode(GParseTreeNode* pPTN);	// The following class is for use within GGrammarRule::Parse() ONLY.	class StackBaseAjuster	{	protected:		GGrammarRule* m_pParentThis;	public:		StackBaseAjuster(GGrammarRule* pParentThis)	{ m_pParentThis = pParentThis; m_pParentThis->m_nStackBase++; }		~StackBaseAjuster()	{ m_pParentThis->m_nStackBase--; }	};friend class StackBaseAjuster;};class GStructureGrammarRule : public GGrammarRule{friend class GStructureParseTreeNode;protected:	GPointerArray* m_pFields;	int GetChildCount();	void AddParsedChild(GParseTreeNode* pChild);public:	GStructureGrammarRule();	virtual ~GStructureGrammarRule();		virtual GParseTreeNode* Parse(GStream* pStream);	void AddField(GGrammarRule* pField);};class GListGrammarRule : public GGrammarRule{protected:	GGrammarRule* m_pListRule;public:	GListGrammarRule();	virtual ~GListGrammarRule();	virtual GParseTreeNode* Parse(GStream* pStream);	void SetListRule(GGrammarRule* pListRule);};class GNonDetGrammarRule : public GGrammarRule{protected:	GPointerArray* m_pChoices;public:	GNonDetGrammarRule();	virtual ~GNonDetGrammarRule();	virtual GParseTreeNode* Parse(GStream* pStream);	void AddChoice(GGrammarRule* pChoice);};class GSyntaxGrammarRule : public GGrammarRule{protected:	char* m_szSyntax;public:	GSyntaxGrammarRule();	virtual ~GSyntaxGrammarRule();	virtual GParseTreeNode* Parse(GStream* pStream);	void SetSyntax(char* szSyntax);};class GTextGrammarRule : public GGrammarRule{public:	enum TEXT_TYPES	{		TT_QUOTED_STRING,		TT_DECIMAL_VALUE,		TT_IDENTIFIER,		TT_XMLTEXT,	};	GTextGrammarRule();	virtual ~GTextGrammarRule();	virtual GParseTreeNode* Parse(GStream* pStream);	void SetType(TEXT_TYPES tt) { m_nType = tt; }protected:	TEXT_TYPES m_nType;	bool IsRightTypeOfChar(char c);	GParseTreeNode* ParseQuotedString(GStream* pStream);	GParseTreeNode* ParseWord(GStream* pStream);	GParseTreeNode* ParseXMLText(GStream* pStream);};#endif // __GGRAMMAR_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -