设计模式C++实现(12)——解释器模式

定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

看定义感觉就不像个程序模式,相关资料不多,靠谱的更少,csdn找到了个例子,还是错误的,我整理修改下作为参考,看代码还是很容易理解这模式是什么。

#include <iostream>

using namespace std;

class Expression
{
public:
	Expression() {};

public:
	virtual bool Interpret(string context) = 0;
};

class TerminalExpression :public Expression
{
public:
	TerminalExpression(string context) :m_strData(context){ };

public:
	bool Interpret(string context)
	{
		if (m_strData.find(context) == string::npos)
		{
			return false;
		}
		return true;
	}

private:
	string m_strData;
};

class OrExpression :public Expression
{
public:
	OrExpression(Expression* pExpression1, Expression* pExpression2) :m_pExpression1(pExpression1), m_pExpression2(pExpression2) {}

public:
	bool Interpret(string context)
	{
		return m_pExpression1->Interpret(context) || m_pExpression2->Interpret(context);
	}

private:
	Expression *m_pExpression1;
	Expression *m_pExpression2;
};

class AndExpression :public Expression
{
public:
	AndExpression(Expression* pExpression1, Expression* pExpression2) :m_pExpression1(pExpression1), m_pExpression2(pExpression2) {}

public:
	bool Interpret(string context)
	{
		return m_pExpression1->Interpret(context) && m_pExpression2->Interpret(context);
	}

private:
	Expression *m_pExpression1;
	Expression *m_pExpression2;
};

int main()
{
	//创建规则:pig 和 dog是 animal(猪狗是动物)
	Expression* pIsAnimal = new OrExpression(new TerminalExpression("pig"), new TerminalExpression("dog"));

	//创建规则:o(o既在Hello中也在World中)
	Expression* pIsAllIn = new AndExpression(new TerminalExpression("Hello"), new TerminalExpression("World"));

	cout << "dog is animal? " << (pIsAnimal->Interpret("dog") == true ? "true" : "false") << endl;
	cout << "o is in Hello and World? " << (pIsAllIn->Interpret("o") == true ? "true" : "false") << endl;

	system("pause");
	return 0;
}

 创建了三个解释规则,包含、两个包含一个、两个都包含,就这回事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值