专栏首页YuanXin设计模式 - 解释器模式 - JavaScript

设计模式 - 解释器模式 - JavaScript

解释器模式: 提供了评估语言的语法表达式的方式。

专注前端与算法的系列干货分享。 引用请声明:xxoo521.com | 「公众号:心谭博客」

什么是“解释器模式?

解释器模式定义: 提供了评估语言的语法表达式的方式。

这是基本不怎么使用的一种设计模式。确实想不到什么场景一定要用此种设计模式。

实现这种模式的核心是:

  1. 抽象表达式:主要有一个interpret()操作
  • 终结符表达式:R = R1 + R2中,R1 R2就是终结符
  • 非终结符表达式:R = R1 - R2中,-就是终结符
  1. 环境(Context): 存放文法中各个终结符所对应的具体值。比如前面R1R2的值。

优缺点

优点显而易见,每个文法规则可以表述为一个类或者方法。这些文法互相不干扰,符合“开闭原则”。

由于每条文法都需要构建一个类或者方法,文法数量上去后,很难维护。并且,语句的执行效率低(一直在不停地互相调用)。

ES6 实现

为了方便说明,下面省略了“抽象表达式”的实现。

class Context {
    constructor() {
        this._list = []; // 存放 终结符表达式
        this._sum = 0; // 存放 非终结符表达式(运算结果)
    }

    get sum() {
        return this._sum;
    }

    set sum(newValue) {
        this._sum = newValue;
    }

    add(expression) {
        this._list.push(expression);
    }

    get list() {
        return [...this._list];
    }
}

class PlusExpression {
    interpret(context) {
        if (!(context instanceof Context)) {
            throw new Error("TypeError");
        }
        context.sum = ++context.sum;
    }
}

class MinusExpression {
    interpret(context) {
        if (!(context instanceof Context)) {
            throw new Error("TypeError");
        }
        context.sum = --context.sum;
    }
}

/** 以下是测试代码 **/

const context = new Context();

// 依次添加: 加法 | 加法 | 减法 表达式
context.add(new PlusExpression());
context.add(new PlusExpression());
context.add(new MinusExpression());

// 依次执行: 加法 | 加法 | 减法 表达式
context.list.forEach(expression => expression.interpret(context));
console.log(context.sum);

参考

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://xxoo521.com/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 【设计模式-解释器模式】

    【导读】加密解密都是需要特定的算法,而这个算法就是一个解释器。又比如翻译器,各种语言都有其翻译器。针对特定语言会有特定的解释器,这就是解释器模式。

    Liusy
  • 设计模式-解释器模式

    cwl_java
  • 设计模式----解释器模式

    解释器模式(Interpreter Pattern):定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的 “语言” 是指使用规定格式和语法的代码...

    大忽悠爱学习
  • 设计模式——解释器模式

    设计模式——解释器模式

    Java架构师必看
  • 设计模式-解释器模式

    具体做法是创建几个解释器,在创建一个解释器封装类,在解释器封装类中完成语法树的构建。然后在场景类中完成递归调用。

    mySoul
  • 设计模式-解释器模式

    随着中国加入wto各国贸易频繁,不同的国度使用的语言不一样,但是在交流过程中很多国家以英文作为交流的对象,而翻译官就是将将两种不同的语言互相翻译,传达各自听得懂...

    逍遥壮士
  • 设计模式(十六) 解释器模式

    解释器模式是一种行为型模式,它的主要作用是用一种方式来实现对表达式或文法的处理。我们可以使用解释器模式处理语言的解析,在设计计算机语言的时候解释器模式很有用处。...

    乐百川
  • 设计模式之解释器模式

    Given a language, define a representation for its grammar along with an interpre...

    beginor
  • 【设计模式】—— 解释器模式Interpret

      模式意图   自定义某种语言后,给定一种文法标准,定义解释器,进行解析。   做过搜索的朋友们可能更了解一些,平时我们搜索所需要的词库,通常就需要用这种方...

    用户1154259
  • JAVA 设计模式 解释器模式

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

    静默虚空
  • 设计模式~解释器

    虽然广义的将,解释器不一定要有一个浏览器,但是使用浏览器仍然是最常见的建立解释器的办法。

    Vincent-yuan
  • 设计模式21之解释器模式

    在软件开发中,可能会出现某些相似的功能多次出现,这些功能有一定的相似性与规律性。这是我们就可以将其归纳成一种简单的语言。这就是解释器模式的来源。

    Lvshen
  • 精读《设计模式 - Interpreter 解释器模式》

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

    黄子毅
  • android设计模式应用--解释器模式

    解释器模式的意图为:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式的结构图如下:

    wust小吴
  • 21.设计模式--解释器模式(Interperter模式)

    解释器模式是一种行为型模式,工作中基本上是用不到的,他的作用就是给定一个语言,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

    大猫的Java笔记
  • 设计模式 - 迭代器模式 - JavaScript

    迭代器模式是指提供一种方法顺序访问一个集合对象的各个元素,使用者不需要了解集合对象的底层实现。

    心谭博客
  • JavaScript设计模式--迭代器模式

    迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 JavaScript中的Array.prototype.forE...

    奋飛
  • 设计模式行为型:解释器模式(InterpreterPattern)

    定义一个语言的文法,并创建一个解释器去解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。

    码农架构
  • Java设计模式学习记录-解释器模式

    这次介绍另一个行为模式,解释器模式,都说解释器模式用的少,其实只是我们在日常的开发中用的少,但是一些开源框架中还是能见到它的影子,例如:spring的spEL表...

    纪莫

扫码关注腾讯云开发者

领取腾讯云代金券