美文网首页
解释器模式(为语言创建解释器)

解释器模式(为语言创建解释器)

作者: 钉某人 | 来源:发表于2017-11-18 21:57 被阅读0次
源码地址 https://github.com/DingMouRen/DesignPattern
解释器模式.png
  • AbstractExperssion 抽象表达式。声明一个抽象的解释操作父类,并定义一个抽象的解释方法,其具体的实现在各个具体的子类解释器中完成。
  • TerminalExpression 终结符表达式。实现文法中与终结符有关的解释器操作。文法中每一个终结符都有一个具体的终结表达式与之对应。
  • NoterminalExpression 非终结符表达式。实现文法中与非终结符有关的解释器操作。
  • Context 上下文环境类 。包含解释器之外的全局信息
定义

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

使用场景

当一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树,可使用解释器模式。

举个例子

算术表达式就是一种文法,我们可以对算术表达式进行解释。例子中没有使用Context类存储全局信息,这里直接使用了。

//抽象解释器 对应AbstractExpression
public abstract class ArithmetExpression {
    //抽象的解析方法
    public abstract int interpret();
}
//具体解释器:数字解释器-》目的是为了解释数字
public class NumExpression extends ArithmetExpression {
   private int num;

    public NumExpression(int num) {
        this.num = num;
    }

    @Override
    public int interpret() {
        return num;

    }
}
//抽象解释器:运算符号的抽象解释器
public class OperatorExpression extends ArithmetExpression {
    //声明两个成员变量并存储运算符号两边的数字解释器
   protected ArithmetExpression expression1,expression2;

    public OperatorExpression(ArithmetExpression expression1, ArithmetExpression expression2) {
        this.expression1 = expression1;
        this.expression2 = expression2;
    }

    @Override
    public int interpret() {
        return 0;
    }
}
//具体解释器:加法运算解释器
public class AdditionExpression extends OperatorExpression {
    public AdditionExpression(ArithmetExpression expression1, ArithmetExpression expression2) {
        super(expression1, expression2);
    }

    @Override
    public int interpret() {
        return expression1.interpret() + expression2.interpret();
    }
}

使用
public static void main(String[] args) {
        Calculator calculator = new Calculator("1 + 1 + 1 - 2");
        System.out.println(calculator.calulate()+"");
    }
总结

解释器模式可以很灵活的对文法规则进行扩展,增加相应的解释器,但是对于过于复杂的语法,会生成大量的类,后期会很难维护,所以解释器模式不适合复杂文法的实现。

相关文章

  • 解释器模式(为语言创建解释器)

    AbstractExperssion 抽象表达式。声明一个抽象的解释操作父类,并定义一个抽象的解释方法,其具体的实...

  • 解释器模式

    使用解释器模式为语言创建解释器。 示例 我们将创建一个接口 Expression 和实现了 Expression ...

  • java设计模式15(解释器模式)

    解释器模式用于描述如何构成一个简单的语言解释器,主要应用于使用面向对象语言开发的解释器的设计。 解释器模式的定义:...

  • 设计模式解释器模式

    解释器模式的定义 解释器模式 (Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来...

  • 第27章 其实你不懂老板的心--解释器模式

    解释器模式 解释器模式(interpreter),给定一个语言,定义它的文法的一种标识,并定义一个解释器,这个解释...

  • 折腾Java设计模式之解释器模

    解释器模式 解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器...

  • 24 【行为型模式】解释器模式

    定义   解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言...

  • 设计模式之解释器模式(行为型)

    [TOC] 一、模式定义 解释器模式(Interpreter Pattern):定义语言的文法,并且建立一个解释器...

  • 72 - 解释器模式详解

    解释器模式,它用来描述如何构建一个简单的“语言”解释器。比起命令模式,解释器模式更加小众,在一些特定的领域会被用到...

  • 解释器模式C++

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

网友评论

      本文标题:解释器模式(为语言创建解释器)

      本文链接:https://www.haomeiwen.com/subject/htmyvxtx.html