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

简介:

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



运行输出: 










本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5093575.html,如需转载请自行联系原作者


相关文章
|
设计模式 移动开发 数据库
行为型设计模式10-解释器模式
行为型设计模式10-解释器模式
157 1
|
4月前
|
设计模式 Java 编译器
【设计模式】【行为型模式】解释器模式(Interpreter)
一、入门 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为设计模式,用于定义语言的语法表示,并提供一个解释器来处理该语法。它通常用于需要解释和执行特定语言或表达式的场
89 11
|
6月前
|
设计模式 SQL Java
【再谈设计模式】解释器模式~语法的解析执行者
解释器模式定义了一种语言的语法表示,并定义一个解释器来解释该语言中的句子。它使用类来表示每个语法规则,并且通过递归调用这些类的方法来解释表达式。本质上,它将一个复杂的表达式分解为一系列简单的部分,然后按照特定的语法规则进行解析和执行。
122 8
|
12月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
107 1
|
设计模式 SQL Java
【设计模式】抖音一面:你不知道解释器模式?
【设计模式】抖音一面:你不知道解释器模式?
118 1
|
设计模式 Go
[设计模式 Go实现] 行为型~解释器模式
[设计模式 Go实现] 行为型~解释器模式
125 1
|
设计模式 存储 Java
小谈设计模式(28)—解释器模式
小谈设计模式(28)—解释器模式
|
设计模式 存储 Java
23种设计模式,解释器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】解释器模式是一种行为设计模式,它用于定义一个语言的语法表示,并提供一个解释器来处理这种语法。主要用于频繁需要解释执行一组固定语法规则的场景,例如编程语言解释器、规则引擎等。
123 3
|
设计模式 监控 Java
聊聊Java设计模式-解释器模式
解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。
143 4
聊聊Java设计模式-解释器模式
|
设计模式
【设计模式】解释器模式
【设计模式】解释器模式