设计模式[6]-Interpreter

简介:

Type: Behavioral

Interpreter:给定一个语言,定义其语法的含义,同时拦截器利用其含义拦截其中的句子。


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

class Context  
{  
public:  
    Context(string pInput):mInput(pInput){};
    string mInput;  
};

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

class TerminalExpression : public AbstractExpression  
{  
public:  
    void interpret(Context* context)  
    {
        string &s = context->mInput;
        cout<<"TerminalExpression:";
        for(int i=0; i<s.length(); i++){
            if(s[i] == '+' || s[i] == '-'  || s[i] == '*'  || s[i] == '/' )
                cout<<" "<<s[i];  
        }
        cout<<endl;
    }  
};  
class NonterminalExpression : public AbstractExpression  
{  
public:  
    void interpret(Context* context)  
    {  
        cout<<"NonterminalExpression:";
        string &s = context->mInput;
        for(int i=0; i<s.length(); i++){
            if(s[i] == '0' || s[i] == '1' || s[i] == '2'  || s[i] == '3'  
                    || s[i] == '4' || s[i] == '5' || s[i] == '6'  
                    || s[i] == '7' || s[i] == '8' || s[i] == '9' )
                cout<<" "<<s[i];  
        }
        cout<<endl;
    }  
};  

int main()  
{  
    Context* context=new Context("123 + 456 * 789");  
    vector<AbstractExpression*> expressions;  
    expressions.push_back(new TerminalExpression());  
    expressions.push_back(new NonterminalExpression());
    vector<AbstractExpression*>::iterator iter=expressions.begin();  
    while(iter!=expressions.end())  
    {  
        (*iter)->interpret(context);  
        iter++;  
    }  
    system("pause"); 
}


目录
相关文章
|
2月前
|
设计模式 自然语言处理 编译器
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
二十三种设计模式全面解析-解释器模式(Interpreter Pattern):用代码诠释语言的魅力
|
8月前
|
设计模式 自然语言处理 机器人
认真学习设计模式之解释器模式(Interpreter Pattern)
认真学习设计模式之解释器模式(Interpreter Pattern)
63 0
|
9月前
|
设计模式 SQL Java
设计模式~解释器模式(Interpreter)-19
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: 代码
53 0
|
9月前
|
设计模式 存储 自然语言处理
【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——解释器模式Interpreter(原理讲解+应用场景介绍+案例介绍+Java代码实现)
44 0
|
设计模式 SQL
从零开始学设计模式(二十一):解释器模式(Interpreter Pattern)
解释器模式(Interpreter Pattern)指的是给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器就是被用来解释这门指定语言中句子。它是一种类行为型模式。
134 0
从零开始学设计模式(二十一):解释器模式(Interpreter Pattern)
|
设计模式 Java
浅谈JAVA设计模式之——解析器模式(Interpreter)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
360 0
浅谈JAVA设计模式之——解析器模式(Interpreter)
|
C#
C#设计模式之二十三解释器模式(Interpreter Pattern)【行为型】
原文:C#设计模式之二十三解释器模式(Interpreter Pattern)【行为型】 一、引言   今天我们开始讲“行为型”设计模式的第十一个模式,也是面向对象设计模式的最后一个模式,先要说明一下,其实这个模式不是最后一个模式(按Gof的排序来讲),为什么把它放在最后呢?因为我们在业务系统中写一个解释器的机会并不是很多,实践比较少,理解和应用该模式就有些困难,所以就放在最后来说。
1308 0
|
Java 编译器 设计模式