美文网首页
解释器模式C++

解释器模式C++

作者: 涵仔睡觉 | 来源:发表于2018-05-11 11:58 被阅读0次

解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

解释器模式结构图

image

解释器模式基本代码

#include <iostream>
#include <string>
using namespace std;

class Context {   // 包含解释器之外的全局信息
private:
    string input;
    string output;
public:
    void SetInput(string i) { input = i; }
    string GetInput() { return input; }
    void SetOutput(string o) { output = o; }
    string GetOutput() { return output; }
};

class AbstractExpression {
public:
    virtual void Interpret(Context* context) = 0;
    virtual ~AbstractExpression() {}
};

class TerminalExpression : public AbstractExpression {  // 终结符表达式
public:
    void Interpret(Context* context) {
        cout << "TerminalExpression: " << context->GetInput() << ", " << context->GetOutput() << endl;
    }
};

class NonterminalExpression : public AbstractExpression {   // 非终结符表达式
private:
    AbstractExpression* expression;
public:
    NonterminalExpression(AbstractExpression* e) { expression = e; }
    void Interpret(Context* context) {
        cout << "NonterminalExpression: " << context->GetInput() << ", " << context->GetOutput() << endl;
        expression->Interpret(context);
    }
};

int main() {
    Context* c = new Context();
    c->SetInput("Hello");
    c->SetOutput("World");

    AbstractExpression* exp1 = new TerminalExpression();
    AbstractExpression* exp2 = new NonterminalExpression(exp1);
    exp1->Interpret(c); // TerminalExpression: Hello, World
    exp2->Interpret(c); // NonterminalExpression: Hello, World
                        // TerminalExpression: Hello, World
    delete exp1;
    delete exp2;
}

应用场景

当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。

优点:
用了解释器模式,就意味着可以容易地改变和扩展文法,因为该模式使用类来表示文法规则,可用继承来改变或者扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类都易于直接编写。

缺点:
解释器为每一条规则至少定义了一个类,因此包含许多规则的文法可能难以维护和管理。当文法非常复杂时,使用其他技术如语法分析程序或编译器声称器来处理。

相关文章

  • 解释器模式C++

    解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器...

  • c++解释器模式

    1.解释器模式简介    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,...

  • 【C++设计模式】 解释器模式

  • 第5章 -行为型模式-解释器模式(终)

    一、解释器模式的简介 二、解释器模式的优缺点 三、解释器模式的实例

  • 17.解释器模式(行为型)

    解释器模式(行为型) 解释器模式很难学,使用率很低! 一、相关概念 1). 解释器模式概述 解释器模式是一种使用频...

  • 解释器模式

    一、解释器模式介绍 二、解释器模式代码实例

  • 解释器模式

    解释器模式 解释器模式的定义 解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的方案...

  • 行为型模式:解释器模式

    原文首发:行为型模式:解释器模式 十一大行为型模式之十:解释器模式。 简介 姓名 :解释器模式英文名 :Inter...

  • Unsafe方法的实现

    1.在解释器模式下,使用的是C++语言的JNI调用2.在JIT模式下,使用的是intrinsic调用。参考:htt...

  • 折腾Java设计模式之解释器模

    解释器模式 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器...

网友评论

      本文标题:解释器模式C++

      本文链接:https://www.haomeiwen.com/subject/eokfdftx.html