概述

解释器模式是一种用得比较少的行为型模式.提供了一种解释语言的语法或表达式的方式.  通过定义一个表达式接口,解释一个特定的上下文.

定义

给定一个语言,解释器模式可以定义出其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子.

解释器中涉及到的文法,就是符合一定规则的语句结构.

如 abcd…….cdef(ab开头,ef结尾,中间N个cd)中,根据N值的不同,可以得到不同的字符串如,abef,abcdef,abcdcdef….  假设我们有如下推导式  S ::= abAef  A ::= cd  其中 ::=表示推导,表示闭包,意思是A可以有0~N个重复,S是初始符号,abef和cd是终结符号.  像这样的从一个具体的符号出发,通过不断地应用一些产生式规则 从而生成一个字符串的集合,我们将描述这个集合的文法称为形式文法.

Interpreter似乎使用面不是很广,它描述了一个语言解释器是如何构成的,在实际应用中,我们可能很少去构造一个语言的文法。我们还是来简单的了解一下。

首先要建立一个接口,用来描述共同的操作。

    public interface AbstractExpression {   void interpret( Context context );    }

再看看包含解释器之外的一些全局信息

    public interface Context { }

AbstractExpression的具体实现分两种:终结符表达式和非终结符表达式。

    public class TerminalExpression implements AbstractExpression {   public void interpret( Context context ) { }    }

对于文法中没一条规则,非终结符表达式都必须的:

  1. public class NonterminalExpression implements AbstractExpression {

  2.    private AbstractExpression successor;

  3.   

  4.    public void setSuccessor( AbstractExpression successor ) {

  5.      this.successor = successor;

  6.    }


  7.    public AbstractExpression getSuccessor() {

  8.      return successor;

  9.    }


  10.    public void interpret( Context context ) { }

  11. }