c++设计模式----解释器模式interpreter
来源:互联网 发布:网络女主播真实收入 编辑:程序博客网 时间:2024/05/29 18:48
解析器:
意图:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
适用性:
当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:
该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间。
效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的, 而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下, 转换器仍可用解释器模式实现, 该模式仍是有用的。
#include <iostream>#include <string>using namespace std;class Context{public:Context(){}~Context(){}};class AbstractExpression{public:virtual ~AbstractExpression(){}virtual void Interpret(const Context& c){}protected:AbstractExpression(){}};class TerminalExpression :public AbstractExpression{public:TerminalExpression(const string& statement){m_statement = statement;}~TerminalExpression(){}void Interpret(const Context& c){cout << "TEMINALEXPRESSION" << endl;}private:string m_statement;};class NonterminalExpression :public AbstractExpression{public:NonterminalExpression(AbstractExpression* ex, int times){m_ex = ex;m_times = times;}~NonterminalExpression(){};void Interpret(const Context& c){for (int i = 0; i < m_times; i++)m_ex->Interpret(c);}private:AbstractExpression* m_ex;int m_times;};void main(){Context* c = new Context();AbstractExpression* abs = new TerminalExpression("Hello");AbstractExpression* nabs = new NonterminalExpression(abs, 2);nabs->Interpret(*c);delete nabs;delete abs;delete c;}
0 0
- Interpreter(解释器)设计模式
- 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)
- 设计模式(20)-解释器模式(Interpreter)
- 设计模式之Interpreter解释器模式
- 设计模式----Interpreter(解释器)模式
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式 - Interpreter Pattern(解释器模式)
- 设计模式--解释器模式(Interpreter)
- 设计模式(22)-解释器模式(Interpreter)
- 设计模式15 - Interpreter 解释器模式
- [设计模式]Interpreter解释器模式
- 设计模式之解释器模式,interpreter
- 设计模式(22) - Interpreter解释器模式
- 设计模式之解释器模式(interpreter)
- 行为设计模式---解释器模式(Interpreter)
- 设计模式 笔记 解释器模式 Interpreter
- c++设计模式----解释器模式interpreter
- 设计模式之:解释器模式(Interpreter)
- 数据结构与算法分析(c++版) #7 栈
- LEETCODE-Remove Linked List Elements
- Connection的方法介绍
- SPOJ NUMTRYE Number Theory (Easy) (pollard_rho分解质因数)
- org.apache.poi.ss.usermodel 类操作excel数据遗漏
- c++设计模式----解释器模式interpreter
- POJ 2886 线段树
- ListView乱谈之ListView的布局
- struts2 Map<String,Object>session心得 浅析
- Listview的自定义Adapter
- Codeforces Round #321 Kefa and Watch(字符串哈希+线段树)
- MarkdownPad 安装使用
- string与char*和char[]之间的相互转换
- request.getInputStream中文乱码解决方案