设计模式-行为-解释器

#pragma once

#include <string>
using namespace std;

class Context //表述内容
{
public:
	Context();
	~Context();
protected:
private:
};

class AbstractExpression //抽象表达式
{
public:
	virtual ~AbstractExpression();
	virtual void Interpret(const Context& c);
protected:
	AbstractExpression();
private:
};
class  TerminalExpression:public //终止符表达式
	AbstractExpression
{
public:
	TerminalExpression(const  string&statement);
	~TerminalExpression();
	void Interpret(const Context& c);
protected:
private:
	string _statement;
};
class  NonterminalExpression:public //非终止符表达式
	AbstractExpression
{
public:
	NonterminalExpression(AbstractExpression* expression,int times);
	~NonterminalExpression();
	void Interpret(const Context& c);
protected:
private:
	AbstractExpression* _expression;
	int _times;
};

#include "StdAfx.h"
#include "interpreter_impl.h"

#include <iostream>
using namespace std;
//Context.cpp

Context::Context()
{
}
Context::~Context()
{
}

//interpret.cpp

AbstractExpression::AbstractExpression()
{
}
AbstractExpression::~AbstractExpression()
{
}
void  AbstractExpression::Interpret(const Context& c)
{
}
TerminalExpression::TerminalExpression(const string& statement)
{
	this->_statement = statement;
}
TerminalExpression::~TerminalExpression()
{
}
void  TerminalExpression::Interpret(const Context& c)
{
	cout<<this->_statement<<"TerminalExpression"<<endl;
}
NonterminalExpression::NonterminalExpression(AbstractExpression* expression,int times)
{
	this->_expression = expression;
	this->_times = times;
}
NonterminalExpression::~NonterminalExpression()
{
}
void  NonterminalExpression::Interpret(const Context& c)
{
	for (int i = 0; i < _times ; i++)
	{
		this->_expression->Interpret(c);
	}
}

// Interpreter.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "interpreter_impl.h"
#include <stdlib.h>

//给定一个语言,定义它的文法的一种表示,并定义一个解释器,
//这个解释器使用该表示来解释语言中的句子。
int _tmain(int argc, _TCHAR* argv[])
{
	Context* c = new Context();
	AbstractExpression*  te  =  new TerminalExpression("hello");
	AbstractExpression*  nte  =  new NonterminalExpression(te,2);
	nte->Interpret(*c);

	delete nte;
	system("pause");

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值