定义:

定义一个语言的文法,可以使用一个解释器来解释其文法。定义终结符和非终结符的统一接口,并使用抽象对象建立非终结符与其它元素的关联。

结构图:

  • AbstractExpression:抽象表达式类,为所有元素定了抽象解释的操作,是多有终结符类和非终结符类的公共父类。
  • TerminalExperssion:终结符类,所有语法中终结符的解释操作,可以通过复制的组合成为非终结符表达式。
  • NotTerminalExperssion:非终结符类,所有语法非终结符的解释操作,由于非终结符可以包含非终结符表达式,可以使用递归的方式来完成解释。
  • Context:环境类,存放全局的信息,通常它存储了需要解释的语句。

注意:

  • 如果有多个终结符类或者非终结符类,可以考虑使用工厂方法来创建对应类的实例。
  • 一般解析表达式都需要栈结构来依次从左向右进行解析。

优点:

  • 可以实现一个简单的语言解析
  • 易于改变和扩展文法,由于解释器使用继承的方式,所以可以动态添加解释器来改变和扩展文法。

缺点

  • 对复杂文法难为维护,一个终结符或者非终结符对应一个类,如果文法复杂则导致类的个数急剧增加。
  • 执行效率低,采用了大量的循环和递归的方法来解析文法。

实例

InterpreterPattern.java

十一个行为模式之解释器模式(Interpreter Pattern)的更多相关文章

  1. 设计模式22---设计模式之解释器模式(Interpreter)(行为型)

    1.讲解解释器模式 1.1解释器模式定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2解释器模式要点 解析器:把描述客户端调用要求的表达式, ...

  2. [19/04/30-星期二] GOF23_行为型模式(中介者模式、命令模式、解释器模式、访问者模式)

    一.中介者模式(meditor) [中介] /*** * 抽象中介者接口和其具体实现类"经理"类 */ package cn.sxt.meditor; import java.ut ...

  3. Java设计模式(24)——行为模式之解释器模式(Interpreter)

    一.概述 概念 自己定义文法,实际中还是很少出现的,作了解 给出一篇网友的参考博文:http://blog.csdn.net/ylchou/article/details/7594135

  4. GoF23种设计模式之行为型模式之解释器模式

    一.概述         给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子. 二.适用性              当需要解释一种语言,并且可以将该语言中的句子表示 ...

  5. 行为型模式(十一) 解释器模式(Interpreter)

    一.动机(Motivate) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化.在这种情况下,将特定领域的问题表达为某种语法规 ...

  6. C#设计模式之二十三解释器模式(Interpreter Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第十一个模式,也是面向对象设计模式的最后一个模式,先要说明一下,其实这个模式不是最后一个模式(按Gof的排序来讲),为什么把它放在最 ...

  7. 深入浅出设计模式——解释器模式(Interpreter Pattern)

    模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题.解释器模式描述了如何构成一个 ...

  8. Interpreter Expression 解释器模式

    简介 Interpreter模式也叫解释器模式,是由GoF提出的23种设计模式中的一种.Interpreter是行为模式之一,它是一种特殊的设计模式,它建立一个解释器,对于特定的计算机程序设计语言,用 ...

  9. 第19章 解释器模式(Interpreter Pattern)

    原文 第19章 解释器模式(Interpreter Pattern) 解释器模式 导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲 ...

随机推荐

  1. Viewport---响应式 Web 设计----在路上(13)

    什么是 Viewport? viewport 是用户网页的可视区域. viewport 翻译为中文可以叫做"视区". 手机浏览器是把页面放在一个虚拟的"窗口"( ...

  2. Android Fragment 使用技巧

    1. Fragment 使用时要有一个无参构造函数 如果没有无参构造函数,而是像按照普通类来使用,只创建有参构造函数,则会出现 android.support.v4.app.Fragment$Inst ...

  3. KnockoutJS 3.X API 第六章 组件(3) 组件绑定

    组件绑定将指定的组件注入到元素中,并且可选地将参数传递给它. 本节目录 一个例子 API 组件生命周期 备注1:仅限模板组件 备注2:使用没有容器元素的组件 备注3:将标记传递给组件 处置和内存管理 ...

  4. 构建hibernate

    package hanqi.dao; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hib ...

  5. 网站初步收工---www.dkill.net

    今天10.30左右备案核审成功了,然后一天都在忙部署和一些其他的东西,中途也写了很多文档,遇到很多问题,直接琢磨了N久,暂时发了这么多教程,明天揭露阿里云的各种坑(先用winServer服务器,有时间 ...

  6. Visualize Surface by Delaunay Triangulator

    Visualize Surface by Delaunay Triangulator eryar@163.com Abstract. Delaunay Triangulation is the cor ...

  7. HighCharts从数据库中读取数据

    1.index.js router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); ...

  8. JMM和happens-before原则

    JMM: Java Memory Model(Java内存模型),围绕着在并发过程中如何处理可见性.原子性.有序性这三个特性而建立的模型. 可见性: JMM提供了volatile变量定义.final. ...

  9. HTTP协议基础

    一.介绍 Hyper Text Transfer Protocol(超文本传输协议)主要用于从WWW服务器传输超文本到本地浏览器的传送协议.已发展到1.1版本. 二.HTTP在TCP/IP参考模型的位 ...

  10. 【原生态】Http请求数据 与 发送数据

    今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求 Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post 根 ...