grammar.h

来自「用VC实现的词法分析器」· C头文件 代码 · 共 65 行

H
65
字号
#pragma once

#include <list>
#include "CodeObject.h"

using std::list;

class Grammar : public IDump
{
	class Node;

	class Edge
	{
	public:
		Edge(Node * p, ObjectType t):Next(p), Type(t) {}
		Node *		Next;
		ObjectType	Type;
	};

	class Node : public IDump
	{
		bool bDtor;
	public:

		virtual void Dump(FILE * stream, bool sub, int nIndent = 0);

		void Destroy();

		Node()	{bDtor = false; Result = Null; }

		ObjectType Result;
		list<Edge> Transitions;
	};
	
	Node * Root;
	Node * Iterator;

public:

	enum Result
	{
		Continue,
		Found,
		NotFound,
		BadInput
	};

	#pragma warning(disable:4200)
	struct Rule
	{
		ObjectType Result;
		ObjectType Steps[];
	};

	Grammar(void)	{Iterator = Root = new Node;}
	~Grammar(void)  {Root->Destroy();}

	int AddRule(Rule * rule);

	virtual void Dump(FILE * stream, bool sub, int nIndent = 0);
	void Begin(void);
	Grammar::Result Next(ObjectType type);
	ObjectType GetResult(void);
};

⌨️ 快捷键说明

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