解释器模式 详解
来源:互联网 发布:爰淘宝 编辑:程序博客网 时间:2024/06/05 03:41
解释器模式 详解
定义
给定一种语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子;
行为型模式
角色
- 上下文环境(Context):一般用来存放文法中各个终结符所对应的具体值;
- 抽象表达式(Expression):声明一个所有的具体表达式角色都需要实现的抽象接口,这个接口主要是interpret方法,称作解释操作;
- 终结符表达式(Terminal Expression): 实现了抽象表达式角色所要求的接口,文法中的每一个终结符都有具体终结表达式与之对应;
- 非终结符表达式(Terminal Expression):文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字;
从网上找到的例图
适用场景
- 当有一个语言需要解释执行,你可将语言中的句子表示为抽象语法树,可以使用解释器模式;
- 该层次结构变得庞大而且难以管理,此时语法分析程序生成器这样的工具是最好的选择,它们无需构建抽象语法树即可解释表达式;
例子
实现代码
/** * Created by George on 16/7/12. */// 抽象表达式var Expression = function () { // 以环境为主,本方法解释给定的任何一个表达式 this.interpret = function (context) { };};// 具体表达式var Variable = function (value) { this.value = value;};Variable.prototype = new Expression();Variable.prototype.interpret = function (context) { return context.lookup(this);};// 具体表达式var Add = function (variable1, variable2) { this.variable1 = variable1; this.variable2 = variable2;};Add.prototype = new Expression();Add.prototype.interpret = function (context) { return this.variable1.interpret(context) + this.variable2.interpret(context);};// 环境类定义出从变量到布尔值的一个映射var Context = function () { this.map = new Array(2);};Context.prototype.assign = function (variable, value) { this.map[variable.value] = value;};Context.prototype.lookup = function (variable) { var value = this.map[variable.value]; if (value !== null) return value;};//主函数var x = new Variable(0);var y = new Variable(1);var context = new Context(x, y);context.assign(x, "x");context.assign(y, "y");var result = new Add(x, y);console.log(result.interpret(context));
实现结果:
为xy
该程序实现了字符串的+表达式,其实就是”x” + “y” = “xy”
优缺点
- 可以将一个需要解释器执行的语言中的句子表示为一个抽象语法树;
- 一些重复出现的问题可以用简单的语言来进行表达;
- 一个语言的文法较为简单;
- 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数;
注意的是
1. 对于复杂文法难以维护;
0 0
- 解释器模式 详解
- 解释器模式 详解
- (二十四)解释器模式详解
- (二十四)解释器模式详解
- (二十四)解释器模式详解
- (二十四)解释器模式详解
- 深入浅出解释器模式
- 解释器(Interpreter )模式
- Interpreter解释器模式
- Interperter 解释器模式
- 解释器模式 InterpretePattern
- 解释器模式
- 解释器模式
- 深入浅出解释器模式
- 解释器模式(python)
- 解释器模式
- 解释器模式
- Java解释器模式
- Leet常用数据结构【LeetCode】
- 最大公约数,最小公倍数
- springboot与jdbc
- 切换
- 数字反转(升级版)
- 解释器模式 详解
- 下拉列表小例子
- rabbitmq 消息确认机制
- numpy module 1 -- Numpy tutorial
- [Cloud Computing]Mechanisms: Endpoint Threat Detection and Response
- 最少硬币问题
- 返回数组最大值
- 排序
- thymeleaf 学习笔记