解释器模式

来源:互联网 发布:英雄无敌3末日之刃mac 编辑:程序博客网 时间:2024/06/05 04:23

1、概念:

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

2、角色和职责:

 


         AbstractExpression      

                    抽象解释器,具体的解释任务由各个实现类完成,具体的解释器分别由TerminalExpression和NonterminalExpression完成

        TerminalExpression

                    终结符表达式,实现与文法中的元素相关的解释操作,通常一个解释器模式中只能有一个终结符表达式,但有多个实例,敌营不同的终结符

        NonterminalExpression

                   非终结符,文法中的每条规则对应一个非终结表达式。

        Contex

                  t环境角色

3、示例代码:

#include<iostream>using namespace std;class Context{ public:Context(int num){m_num = num;}int getNum(){return m_num;}int getRes(){return m_res;}void setNum(int num){m_num = num;}void setRes(int res){m_res = res;}private:int m_num;int m_res;};class Expression{public:virtual void interpreter(Context *context) = 0;private:Context *m_contex;};// 加法class PlusExpression :public Expression{public:PlusExpression(){}virtual void interpreter(Context *context){int num = context->getNum();num++;context->setNum(num);context->setRes(num);}};// 减法class SubExpression :public Expression{public:SubExpression(){}virtual void interpreter(Context *context){int num = context->getNum();num--;context->setNum(num);context->setRes(num);}};int main(void){Expression *expression = NULL;Expression *expression2 = NULL;Context*contex = NULL;contex = new Context(10);cout << contex->getNum() << endl;expression = new PlusExpression;expression->interpreter(contex);cout << contex->getNum() << endl;expression2 = new SubExpression;expression2->interpreter(contex);cout << contex->getNum() << endl;delete expression;delete expression2;delete contex;return 0;}


原创粉丝点击