- 浏览: 611987 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
意图
给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子.
比如说对任何一种语言,已经把它语法的解释都已经解释出来了,接着这个语言的任何一个句子我都可以对它进行解释.
适用性
当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式.而当存在以下情况时该模式效果最好:该文法简单,对于复杂的文法,文法的类层次变得庞大而无法管理.此时语法分析程序生成器这样的工具是更好的选择.它们无需构建抽象语法树既可解释表达式,这样可以节省空间而且还可能节省时间.效率不是关键问题.
构成:
1.抽象表达式角色:声明一个所有的具体表达式角色都需要实现的抽象接口.这个接口主要是一个Interpreter()方法,称作解释操作.
2.终结符表达式角色:这是一个具体角色
--实现了抽象表达式角色所要求的接口,主要是一个Interpret()方法.
--文法中的每一个终结符都有一个具体终结表达式与之相对应.
3.非终结符表达式:这是一个具体角色
--实现了抽象表达式角色所要求的接口,主要是一个Interpret()方法
--解释操作以递归方式进行调用
(非终结符表达式可以包含若干个终结符表达式,就像一个枝节点可以包含若干个叶节点,两者之间是一种一对多的关系,非终结符表达式可以递归调用终结符表达式,还有一种情况就是非终结符表达式里面还可以包含若干个终结符表达式.)
4.环境角色:提供解释器之外的一些全局信息(对解释器提供额外的操作等)
5.客户端角色:调用解释操作Interpret.
对于一个布尔表达式它有多种可能,比如说:我们可以定义一个常量true或false,另外定义一个变量,这个变量可以稍后给它赋值,先定义好变量,具体值是什么可以最后给它赋上,并且还可以去改变它的值,还可以定义布尔表达式的与&&操作,或||操作,非!操作.
我们可以模拟一个具体的表达式,这个表达式就是一个布尔表达式,它可能是多个布尔表达式组成的一个整体,然后最终我们求得这个结果,里面肯定要涉及到若干的表达式的与,或,非,这里的每个操作都涉及到一个解释,比如两个bool表达式它们进行操作的时候,这就是一种解释器的行为,我们可以将这里面每种可能出现的情况都把它提取出来,作为我们的终结符表达式,比如说我们定义了与&&这样一个操作,那么这样就形成两个布尔表达式,它们具体结果是真还是假,我们是在终结符表达式里面执行的判断.
(图片看不清可点击得到图片原始大小)
ClassDiagram:
SequenceDiagram:
当调用非终结符表达式的时候,它又可以去调用它所包含的其他的非终结符表达式以及终结符表达式,通过这样一个递归的调用关系就实现了不断的解释这样一个过程.
InterpreterPattern示例意图:
解释布尔表达式的解释器,布尔表达式有多种情况比如:常量和常量,变量和变量,常量和变量, 相应的还有与(&&),或(||)非(!)几种操作,要把它们都实现出来,因此我要定义一个常量,一个变量,再去定义与And,或Or,非Not,这样几种操作,然后给出一个复杂的布尔表达式,通过所提供的解释器对给出复杂的布尔表达式进行解释,然后获得我想要的结果.
class Client { static void Main(string[] args) { Context context = new Context(); Variable x = new Variable("x"); Variable y = new Variable("y"); Constant c = new Constant(true); context.Assign(x, false); context.Assign(y, true); Expression exp = new Or(new And(c, x), new And(y, new Not(x))); Console.WriteLine("x={0}", x.Interpret(context)); Console.WriteLine("y={0}", y.Interpret(context)); Console.WriteLine("exp={0}", exp.Interpret(context)); Console.ReadKey(); } } /// <summary> /// 抽象表达式角色 /// </summary> public abstract class Expression { //抽象表达式角色依赖与环境角色来进行相应的解释. public abstract bool Interpret(Context context); } /// <summary> /// 环境角色 /// </summary> public class Context { //环境角色主要提供一些全局性的操作(通用的操作). //该例子定义的通用性的操作:定义一个变量给变量赋值,查找变量值. private Hashtable table = new Hashtable(); /*通过客户端定义变量给相应的变量赋值存放在HashTable里. * 该变量只有两种可能true和false; */ public void Assign(Variable var, bool value) { table.Add(var, value); } //取出变量的值. public bool Lookup(Variable var) { return (Boolean)table[var]; } } /// <summary> /// 终结符表达式角色 /// </summary> public class Variable : Expression { //该类定义了一个变量 /*它里面只能定义true和false所以它是一个 终结符表达式.*/ private string name; public Variable(string s) { name = s; } public override bool Interpret(Context context) { return context.Lookup(this); } } /// <summary> /// 终结符表达式角色 /// </summary> class Constant : Expression { //该类定义了一个常量 /*它里面只能定义true和false所以它是一个 终结符表达式.*/ bool value; public Constant(bool v) { value = v; } public override bool Interpret(Context context) { return value; } } /// <summary> /// 非终结符表达式 /// </summary> class And : Expression { //该类定义与(&&)的操作 /*非终结符表达式它里面会包含 若干个非终结符表达式及终结符表达式*/ Expression left; Expression right; public And(Expression l, Expression r) { left = l; right = r; } public override bool Interpret(Context context) { return left.Interpret(context) && right.Interpret(context); } } /// <summary> /// 非终结符表达式 /// </summary> class Or : Expression { //该类定义与(||)的操作 /*非终结符表达式它里面会包含 若干个非终结符表达式及终结符表达式*/ Expression left; Expression right; public Or(Expression l, Expression r) { left = l; right = r; } public override bool Interpret(Context context) { return left.Interpret(context) || right.Interpret(context); } } /// <summary> /// 非终结符表达式 /// </summary> class Not : Expression { //该类定义与(||)的操作, /*该类可包含一个终结符表达式或 非终结符表达式所以它是非终结符表达式*/ Expression exp; public Not(Expression e) { exp = e; } public override bool Interpret(Context context) { return !exp.Interpret(context); } }
发表评论
-
AbstractFactoryPattern(二)
2009-05-01 21:42 714关于抽象工厂(Abstract F ... -
VisitorPattern
2009-05-01 19:20 853意图表示一个作用于某 ... -
MementoPattern
2009-05-01 16:10 724意图在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之 ... -
MediatorPattern
2009-05-01 11:16 705意图用一个中介对象封装一系列的对象交互.中介者使各对象不需要显 ... -
Statepattern
2009-04-30 13:45 805意图允许一个对象在其 ... -
Chain of Responsibility Pattern
2009-04-28 23:23 863意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之 ... -
IteratorPattern
2009-04-26 18:15 819意图提供一种方法顺序 ... -
CommandPattern
2009-04-26 13:35 700意图:将一个请求封装为 ... -
StrategyPattern
2009-04-25 19:08 751策略模式(Strategy Pattern) 中体现了两个非常 ... -
TemplateMethodPattern
2009-04-25 13:24 837TemplateMethodPattern:定义一个操作中算法 ... -
PrototypePattern
2009-04-23 15:46 796意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 ... -
追MM与23种设计模式
2009-04-21 15:13 6921、FACTORY—追MM少不了请 ... -
AbstractFactoryPattern
2009-04-21 13:23 748意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定 ... -
FactoryMethodPattern
2009-04-19 22:20 870工厂方法(FactoryMethod ... -
ObserverPattern
2009-03-27 17:40 807观察者模式又叫做发布- ... -
SimpleFactoryPattern
2009-03-26 00:57 795工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决 ... -
Builder Pattern
2009-03-21 18:47 1396建造者(Builder)模式 ... -
Singleton Pattern
2009-03-16 16:50 989单件模式:(Singleton pattern) 1.目的 1 ...
相关推荐
本项目“InterpreterPattern.rar”是基于Qt C++框架开发的一个计算器应用程序,巧妙地融合了解析器模式和状态机模式,旨在帮助开发者更好地理解和应用这两种设计模式。 首先,让我们深入解析器模式(Interpreter ...
**设计模式之解释器模式(Interpreter Pattern)** 解释器模式是一种行为设计模式,它提供了一种方式来表示语言的语法,并实现一个解释器用于解析这种语法的语句。这种模式通常用于小型、特定领域的语言(DSL)实现,...
首先,我们来看`InterpreterPattern.cpp`和`InterpreterPattern.h`这两个文件,它们很可能是实现解释器模式的核心代码。`InterpreterPattern.h`可能包含了模式的主要接口定义,而`InterpreterPattern.cpp`则实现了...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...
解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言的句法定义一个解释器。它通过定义一个语言的文法表示以及解释器的实现来解析和执行表达式。这种模式通常用于设计语言、脚本或规则引擎。 ...
解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor ...
解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一个语言的文法,并解析语言中的表达式。具体来说,解释器模式通过定义一个解释器来解释语言中的表达式,从而实现对语言的解析和执行。 在解释...
解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...
17. 解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者...
解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式...
解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern)...
从提供的文件信息中,我们可以推断该课件《C++设计模式课件25_Interpreter.pdf》是关于C++语言实现设计模式中的解释器模式(Interpreter Pattern)的一部分教学资料。文件中出现的网站***和网易云课堂是指两个在线...
解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null ...
解释器模式(Interpreter Pattern) 18. 中介者模式(Mediator Pattern) 19. 职责链模式(Chain of Responsibility Pattern) 20. 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) ...
请求发送者与接收者解耦——命令模式(六) 解释器模式-Interpreter Pattern 自定义语言的实现——解释器模式(一) 自定义语言的实现——解释器模式(二) 自定义语言的实现——解释器模式(三) 自定义语言的实现...
文档中还提到了其他一些行为型设计模式,如命令模式(Command Pattern)、解释器模式(Interpreter Pattern)、迭代器模式(Iterator Pattern)、中介者模式(Mediator Pattern)、备忘录模式(Memento Pattern)、...
9. [解释器模式](worthed/OriginBlog/blob/master/articles/InterpreterPattern.md) 10. [访问者模式](worthed/OriginBlog/blob/master/articles/VisitorPattern.md) 11. [中介者模式](worthed/OriginBlog/blob/...
还有其他的设计模式,例如代理模式(Proxy Pattern)、享元模式(Flyweight Pattern)、责任链模式(Chain of Responsibility Pattern)、命令模式(Command Pattern)、解释器模式(Interpreter Pattern)、迭代器...