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

来源:互联网 发布:python 打印汉字编码 编辑:程序博客网 时间:2024/05/18 03:00

解释器模式:
给定一个语言,定义了它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子。
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;}   

执行输出:
这里写图片描述

0 0
原创粉丝点击