你的位置:首页 > ASP.net教程

[ASP.net教程]设计模式学习笔记(二十三:解释器模式)


1.1概述

    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这就是解释器模式的定义。

  对于某些问题,我们可能希望用简单的语言来描述,即希望用简单的语言来实现一些操作,比如用简单语言实现简单的翻译操作,用户输入Teacher drink water,程序输出“老师喝水”。学习使用解释器模式需要用到一些形式语言的知识,和编译原理课程中相关知识点比较接近,个人觉得编译原理中相关理论知识比较晦涩,在此处就不继续往下细究具体原理,有兴趣的同学可以去看一看编译原理的教材。

  例如,一个语言一旦有了语句,就可以让程序根据语句进行某种操作。定义一个简单语言,如果使用程序实现该语言时,定义的基本操作是将终结符号的值翻译为汉语,如Teacher翻译为“老师”、Tiger翻译为“老虎”,那么当用户使用该语言输入“Teacher drink water”后,程序输出“老师喝水”。

 

 

1.2模式的结构

解释器模式包括以下四种角色:

(1)抽象表达式(AbstractExpression):该角色是一个接口,负责定义抽象的解释操作。

(2)终结符表达式(TerminalExpression):实现AbstractExpression接口的类。该类将接口中的解释操作实现为与文法中的终结符相关联的操作,即文法中每个终结符号需要一个TerminalExpression类。

(3)非终结符表达式(NonterminalExpression):实现AbstractExpression接口的类。文法中的每一条规则都需要一个NonterminalExpression类。NonterminalExpression类为文法中的非终结符号实现解释操作,该解释操作通常使用递归调用表示文法规则中的那些对象的解释操作。

(4)上下文(Context):包含解释器之外的一些全局信息。

解释器模式结构的类图如下图所示:

 

 图一:解释器模式的类图(PS:类图画的不标准,此处仅作参考哦)

 

 

1.3解释器模式的优点

(1)将每一个语法规则表示成一个类,方便于实现简单的语言。

(2)由于使用类表示语法规则,可以教容易改变或扩展语言的行为。

(3)通过在类结构中加入新的方法,可以在解释的同时增加新的行为。

 

 

1.4适合使用解释器模式的情景

(1)当有一个简单的语言需要解释执行,并且可以将该语言的每一个规则表示为一个类时,就可以使用解释器模式。