设计模式-行为-解释器

来源:互联网 发布:淘宝旺旺位置设置 编辑:程序博客网 时间:2024/05/21 17:01
#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.cppContext::Context(){}Context::~Context(){}//interpret.cppAbstractExpression::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;}