`
zhangweieye
  • 浏览: 8918 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

设计模式学习笔记(二十三:解释器模式)

 
阅读更多

1.1概述

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

  对于某些问题,我们可能希望用简单的语言来描述,即希望用简单的语言来实现一些操作,比如用简单语言实现简单的翻译操作,用户输入Teacher drink water,程序输出“老师喝水”。学习使用解释器模式需要用到一些形式语言的知识,和编译原理课程中相关知识点比较接近,个人觉得编译原理中相关理论知识比较晦涩,在此处就不继续往下细究具体原理,有兴趣的同学可以去看一看编译原理的教材。

  例如,一个语言一旦有了语句,就可以让程序根据语句进行某种操作。定义一个简单语言,如果使用程序实现该语言时,定义的基本操作是将终结符号的值翻译为汉语,如Teacher翻译为“老师”、Tiger翻译为“老虎”,那么当用户使用该语言输入“Teacher drink water”后,程序输出“老师喝水”。

 

 

1.2模式的结构

解释器模式包括以下四种角色:

(1)抽象表达式(AbstractExpression):该角色是一个接口,负责定义抽象的解释操作。

(2)终结符表达式(TerminalExpression):实现AbstractExpression接口的类。该类将接口中的解释操作实现为与文法中的终结符相关联的操作,即文法中每个终结符号需要一个TerminalExpression类。

(3)非终结符表达式(NonterminalExpression):实现AbstractExpression接口的类。文法中的每一条规则都需要一个NonterminalExpression类。NonterminalExpression类为文法中的非终结符号实现解释操作,该解释操作通常使用递归调用表示文法规则中的那些对象的解释操作。

(4)上下文(Context):包含解释器之外的一些全局信息。

解释器模式结构的类图如下图所示:

 

 图一:解释器模式的类图(PS:类图画的不标准,此处仅作参考哦)

 

 

1.3解释器模式的优点

1)将每一个语法规则表示成一个类,方便于实现简单的语言。

2)由于使用类表示语法规则,可以教容易改变或扩展语言的行为。

3)通过在类结构中加入新的方法,可以在解释的同时增加新的行为。

 

 

1.4适合使用解释器模式的情景

1)当有一个简单的语言需要解释执行,并且可以将该语言的每一个规则表示为一个类时,就可以使用解释器模式。

分享到:
评论

相关推荐

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    设计模式笔记(包含所有设计模式)个人总结提炼笔记

    3. 行为型模式:行为型模式关注对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。这些模式可以帮助...

    java-design-patterns:Java 设计模式学习笔记

    Java Design PatternsJava 设计模式学习笔记,简单易懂,每个模式都有相应的代码示列,帮助学习理解。在线阅读地址:设计原则创建型模式作用:将创建与使用代码解耦结构型模式作用:将不同的功能代码解耦桥接模式...

    关于自己学习设计模式的笔记整理

    该文档是自己在学习设计模式时整理的常用设计模式pdf文档,包括源码,包括装饰模式,代理模式,责任链模式,命令模式,解释器模式,迭代器模式,备忘录模式,观察者模式,工厂模式,建造者模式,适配器模式,桥梁...

    java-patterns:Java 23种基本的设计模式整料整理学习,责任链模式过滤器,工厂模式BeanFactory,观察者模式ContextListen等。结合Spring源码理解学习

    describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...

    (完整版)Python基础学习笔记.docx

    (完整版)Python基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。(完整版)Python基础学习笔记全文共69页,当前为第1页。Python 基础学习笔记 (完整版)Python基础学习笔记全文共69页,当前为第1页。...

    左程云leetcode-hjLearningNotes:hj学习笔记

    解释器模式 观察者模式 备忘录模式 迭代器模式 访问者模式 中介者模式 第二部分:JAVA 第三部分:Spring框架 第四部分:中间件 第五部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 ...

    net学习笔记及其他代码应用

    14.CTS、CLS、CLR分别作何解释? 答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。 15.什么是装箱和拆箱? 答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。 16.什么是受...

    leetcode下载-LearnNote:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 ...

    leetcode下载-LearningNotes:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 ...

    高级java笔试题-Notes-And-Blog:阅读笔记及高质量博客整理

    解释器模式 :collision:数据结构与算法 点击关闭/打开所有内容 :comet:源码学习 博客 :ant:数据结构与算法 :spider:设计模式 :honeybee:Javascript 语言标准 函数式编程 :butterfly:Nodejs Nest :lady_beetle:...

    leetcode下载-AndroidLearningNotes:Android学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 ...

    asp.net知识库

    VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...

    leetcode下载-LearningNote:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 ...

    java-design-patterns:java 学习模式

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式之UML 类图以及类间关系(泛化 、实现、依赖...

    leetcode下载-LearningnNotes:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 ...

    leetcode下载-LearningNotess:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 ...

    leetcode下载-StudyNotes:学习笔记

    解释器模式 命令模式 备忘录模式 迭代器模式 模板方法模式 访问者模式 中介者模式 组合模式 装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 ...

Global site tag (gtag.js) - Google Analytics