码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之二十三:解释器模式

时间:2015-06-30 18:32:37      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

解释器模式:
给定一个语言,定义了它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子。
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.

UML图:
技术分享

主要包括:

  1. AbstractExpression:声明了一个执行操作的接口。
  2. TerminalExpression:终结符表达式,实现与文法中终结符相关联的操作。
  3. NonterminalExpression:非终结符表达式,为文法中非终结符实现解释操作。对文法中的每一条规则R1,R2,R3…..都需要一个具体的非终结符表达式类。
  4. Context:包含解释器外的一些全局信息。
  5. Client:定义了一个抽象的语法树,这棵语法树用来表示语言中特定的句子。语法树由NonterminalExpression和TerminalExpression构成。

C++实现:

#include <iostream>
#include <list>

using namespace std;

class Context
{
};

class AbstractExpression
{
        public:
                virtual void interpret(Context * c)=0;
};

class TerminalExpression:public AbstractExpression
{
        public:
                void interpret(Context *c)
                {
                    cout<<"TerminalExpression interpret"<<endl;
                }

};

class NonTerminalExpression:public AbstractExpression
{
        public:
                void interpret(Context *c)
                {
                    cout<<"NonTerminalExpression interpret"<<endl;
                }
};

int main()
{
    cout<<"解释器模式代码"<<endl;
    list<AbstractExpression *> lists;
    Context *c=new Context;

    AbstractExpression * te1=new TerminalExpression();
    lists.push_back(te1);

    AbstractExpression * te2=new TerminalExpression();
    lists.push_back(te2);

    AbstractExpression * te3=new TerminalExpression();
    lists.push_back(te3);

    AbstractExpression * te4=new TerminalExpression();
    lists.push_back(te4);

    AbstractExpression * nte1=new NonTerminalExpression();
    lists.push_back(nte1);

    list<AbstractExpression*>::iterator iter=lists.begin();
    for(;iter!=lists.end();iter++)
    {
        (*iter)->interpret(c);
    }

    delete c;
    delete te1;
    delete te2;
    delete te3;
    delete te4;
    delete nte1;

    return 0;
}   



执行输出:
技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

设计模式之二十三:解释器模式

标签:

原文地址:http://blog.csdn.net/u012501459/article/details/46697385

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!