1. 程式人生 > >Interpreter模式(C++直譯器模式)

Interpreter模式(C++直譯器模式)

Interpreter模式提供了一個實現語法直譯器的框架,其目的就是使用一個直譯器為使用者提供一個一門定義語言語法表示的直譯器,並且通過這個直譯器來解釋語言中的句子。

    Interpreter模式使用類來表示文法規則,因此方便於文法的擴充套件。

程式碼如下:

#include <iostream>
#include <string>
using namespace std;
class Context
{
public:
	Context(){}
	~Context(){}
};


class AbstractExpression
{
public:
	virtual ~AbstractExpression(){}
	virtual void Interpret(const Context& c){}
protected:
	AbstractExpression(){}
};


class TerminalExpression:public AbstractExpression
{
public:
	TerminalExpression(const string& statement)
	{m_statement=statement;}
	~TerminalExpression(){}
	void Interpret(const Context& c)
	{cout<<"TEMINALEXPRESSION"<<endl;}
private:
	string m_statement; 
};


class NonterminalExpression:public AbstractExpression
{
public:
	NonterminalExpression(AbstractExpression* ex,int times)
	{
		m_ex=ex;
		m_times=times;
	}
	~NonterminalExpression(){};
	void Interpret(const Context& c)
	{
		for(int i=0;i < m_times; i++)
			m_ex->Interpret(c);
	}
private:
	AbstractExpression* m_ex;
	int m_times;
};


void main()
{
	Context* c=new Context();
	AbstractExpression* abs=new TerminalExpression("Hello");
	AbstractExpression* nabs=new NonterminalExpression(abs,2);
	nabs->Interpret(*c);

	delete nabs;
	delete abs;
	delete c;
}