设计模式之二十三:解释器模式
来源:互联网 发布:python 打印汉字编码 编辑:程序博客网 时间:2024/05/18 03:00
解释器模式:
给定一个语言,定义了它的文法的一种表示,并定义了一个解释器,这个解释器使用该表示来解释语言中的句子。
Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
UML图:
主要包括:
- AbstractExpression:声明了一个执行操作的接口。
- TerminalExpression:终结符表达式,实现与文法中终结符相关联的操作。
- NonterminalExpression:非终结符表达式,为文法中非终结符实现解释操作。对文法中的每一条规则R1,R2,R3…..都需要一个具体的非终结符表达式类。
- Context:包含解释器外的一些全局信息。
- 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;}
执行输出:
0 0
- 设计模式之二十三:解释器模式
- 二十三种设计模式之解释器模式
- 二十三种设计模式之行为型模式之解释器模式
- 设计模式实现(二十三)--- 解释器模式(interpreter)
- Java设计模式(二十三)----解释器模式
- JAVA--解释器模式(Interpreter)--设计模式二十三
- Java设计模式《二十三》解释器模式
- 设计模式(二十三)——解释器模式
- Java开发中的23种设计模式之二十三:解释器模式(Interpreter)
- 深入浅出设计模式笔记之十三:解释器模式
- 二十三 设计模式之桥梁模式
- (二十三)解释器模式
- 设计模式笔记(二十三) —— 解释器模式
- 浅谈Java设计模式(二十三)解释器模式(Interpreter)
- Java面向对象设计模式(二十三)——解释器模式(Interpreter)
- 二十三、解释器模式——设计模式学习笔记
- 二十一 设计模式之解释器模式
- 设计模式之(二十)解释器模式Interpreter
- strlen的汇编实现
- C# SQL多条件查询拼接技巧
- iOS and OS X Network Programming Cookbook |Retrieving network address information
- VC6调出对话框消息序列
- Tomcat8+redis做session同步
- 设计模式之二十三:解释器模式
- ip netns 常用的namespace的命令
- C/C++预处理 ISO/ANSI C标准译文与注解
- [leetcode] 106.Construct Binary Tree from Inorder and Postorder Traversal
- gson的简单应用
- Redis 3.0集群搭建测试(二)
- php结合phpqrcode生成带图片LOGO的二维码
- php清除数组中的空值元素
- RankNet——基本思想