设计模式-解释器模式
2023-09-11 14:14:01 时间
解释器模式(interpreter):
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表示为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题(比如正则表达式)。
解析器模式实现代码:
#pragma once
#include <string>
#include <iostream>
using namespace std;
//Context 包含解释器之外的一些全局信息
class CContext
{
public:
string m_strInput;
CContext(const string &strInput)
{
m_strInput = strInput;
}
};
//AbstractExpression(抽象表达式),声明一个抽象的解释操作,这个接口为抽象语法树中
//所有的节点所共享。
class CAbstractExpression
{
public:
virtual void Interpret(CContext *pContext) = 0;
};
//TerminalExpression(终结符表达式),实现与文法中的终结符相关联的解释器操作。
//实现抽象表达式中所要求的接口,主要是一个interpret()方法。文法中每一个终结符
//都有一个具体终结表达式与之相对应。
class CTerminalExpression : public CAbstractExpression
{
public:
void Interpret(CContext *pContext)
{
cout<<"zhongduanjiehsiqi:"<<pContext->m_strInput<<endl;
}
};
//NonterminalExpression(非终结符表达式),为文法中的非终结符实现解释操作。
//对文法中每一条规则R1、R2......Rn都需要一个具体的非终结符表达式类。
//通过实现抽象表达式的interpret()方法实现解释器操作。解释操作以递归方式
//调用上面所提到的表达式R1、R2......Rn中各个符号的实例变量。
class CNonterminalExpression : public CAbstractExpression
{
public:
void Interpret(CContext *pContext)
{
cout<<"feizhongduanjiehsiqi:"<<pContext->m_strInput<<endl;
}
};
运客户端调用:
#include "stdafx.h"
#include <list>
#include <iostream>
#include <windows.h>
#include "CinterpreterMode.h"
using namespace std;
int main()
{
CContext *pContext = new CContext("test");
list <CAbstractExpression *> lstWork;
lstWork.clear();
lstWork.push_back(new CTerminalExpression());
lstWork.push_back(new CNonterminalExpression());
lstWork.push_back(new CTerminalExpression());
lstWork.push_back(new CTerminalExpression());
for each(CAbstractExpression * i in lstWork)
{
i->Interpret(pContext);
delete i;
}
delete pContext;
return 0;
}
运行结果:
相关文章
- 在Raid模式下装Win10找不到固态硬盘怎么办
- php设计模式-工厂模式
- C++设计模式之状态模式(二)
- Android设计模式(七)--原型模式
- R语言数据挖掘第2章 频繁模式、关联规则和相关规则挖掘
- 设计模式java——解释器模式
- 设计模式--行为型模式--解释器模式
- 用最简单的例子理解策略模式(Strategy Pattern)
- 【设计模式】我终于读懂了享元模式。。。
- 【Python】设计模式(3)--生成器模式
- Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)
- Java设计模式之结构型:桥接模式
- Java设计模式之行为型:访问者模式
- Java设计模式之行为型:解释器模式
- JSP-Spring4学习笔记(四)装饰模式、静态和动态代理
- 设计模式-解释器模式
- 理解VMware的三种工作模式
- Java学习---常见的模式
- Java 23种设计模式详尽分析与实例解析之一--创建型模式
- 设计模式(三)原型模式
- java设计模式案例详解:观察者模式
- C++设计模式实现--职责链(Chain of Responsibility)模式
- 【设计模式】访问者模式
- <十一>读<<大话设计模式>>之抽象工厂模式
- 23种设计模式(3):抽象工厂模式
- 设计模式之解释器模式(Interpreter)摘录
- 深入理解JavaScript系列(26):设计模式之构造函数模式
- 空对象模式
- 【设计模式】行为型模式-第 3 章第 1 讲【责任链模式】