结构
意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
适用性
  • 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:
  • 该文法简单对于复杂的文法, 文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达式, 这样可以节省空间而且还可能节省时间。
  • 效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的, 而是首先将它们转换成另一种形式。例如,正则表达式通常被转换成状态机。但即使在这种情况下, 转换器仍可用解释器模式实现, 该模式仍是有用的。

 1 using System;
 2     using System.Collections;
 3
 4     class Context
 5     {
 6
 7     }
 8
 9     abstract class AbstractExpression
10     {
11         abstract public void Interpret(Context c);
12     }
13
14     // class for terminal symbol
15     class TerminalExpression : AbstractExpression
16     {
17         override public void Interpret(Context c)
18         {
19
20         }
21     }
22
23     // class for grammar rule (one per rule needed)
24     class NonterminalExpression : AbstractExpression
25     {
26         override public void Interpret(Context c)
27         {
28
29         }
30     }
31     // to extend grammar, just add other NonterminalExpression classes
32
33     /// <summary>
34     ///    Summary description for Client.
35     /// </summary>
36     public class Client
37     {
38         public static int Main(string[] args)
39         {
40             Context c = new Context();
41             ArrayList l = new ArrayList(); //really need a tree here!
42
43             // build up context information
44             // . . .
45
46             // Populate abstract syntax tree with data
47             l.Add(new TerminalExpression());
48             l.Add(new NonterminalExpression());
49
50             // interpret
51             foreach (AbstractExpression exp in l)
52             {
53                 exp.Interpret(c);
54             }
55
56             return 0;
57         }
58     }

解释器模式

转载于:https://www.cnblogs.com/ziranquliu/p/4666218.html

行为型设计模式之解释器模式(Interpreter)相关推荐

  1. 设计模式之解释器模式(Interpreter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  2. 设计模式 笔记 解释器模式 Interpreter

    //---------------------------15/04/26---------------------------- //Interpreter 解释器模式----类行为型模式 /* 1 ...

  3. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

  4. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  5. 设计模式之---解释器模式

    解释器模式概述 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的 ...

  6. 【设计模式】解释器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.解释器模式简介 二.解释器模式适用场景 三.解释器模式优缺点 四.解释器模式与适配器模式 五.解释器模式代码示例 1.解释器接口 2.加法解释器 3.乘法解释器 4.整型解释器 5.语法 ...

  7. python实现解释器_Python设计模式之解释器模式

    解释器模式 对每个应用来说,至少有以下两种不同的用户分类. 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就足够了. 高级用户:这些用户, ...

  8. java 设计模式之解释器模式(十九)

    java 设计模式之解释器模式①⑨ 定义 角色分析 使用场景 代码实现 躁动的心灵,不安的灵魂.在彷徨中挣扎,在迷失中探索.时光飞逝,努力不变. 设计模式学习,近期我会把23种设计模式都写成博客,敬请 ...

  9. 设计模式之解释器模式、例子分析

    1. 定义 解释器模式( interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子 2. 参考 https://blog.csdn.ne ...

最新文章

  1. Python正则表达式初识(十)附正则表达式总结
  2. h3c wa2620胖ap设置_AP考试|错过报名不用慌,香港考区目前仍然可以报名!
  3. 知识体系(不断更新)
  4. 第六章扩展——VMA
  5. 微信公众号对接PHP电影网站,wxapi 微信公众号平台与电影类网站对接源码 wxapi 联合开发网 - pudn.com...
  6. ASCII、Unicode、GBK和UTF-8字符编码的区别联系(转载)
  7. Eclipse正式代替Oracle接管Java EE
  8. java 线程修改数据库连接_如何强制Java线程关闭线程本地数据库连接
  9. Metasploit Framework —— Exploit
  10. axure9实用操作设置鼠标单击交互事件为什么没响应
  11. 阿里云服务器搭建Django环境二:django+mysql环境搭建
  12. 【大数据离线开发】1、大数据准备环境之Linux配置
  13. 热烈祝贺 Entrust 正式成为本届SDS赞助商
  14. 编译Linux内核没有zImage,Linux 编译系统的简单介绍与内核编译安装
  15. 全球与中国切板刀市场深度研究分析报告
  16. DSO Framer _ WinForm 使用
  17. 小米/红米手机如何通过USB数据线把手机网络共享给电脑
  18. html手机和电脑一致,浏览器兼容性(手机、电脑。js、html、css)
  19. ARM CPU性能优化:FP32 、FP16 和BF16区别
  20. CalibrateIO

热门文章

  1. php 特有,PHP特殊数据类型有哪些?原来这门编程语言如此有趣
  2. android实现通知栏搜索功能,actionBar+SearchView实现搜索功能
  3. redis高级用法:geo位置相关信息
  4. python是动态还是静态_python之静态方法和动态方法介绍
  5. vue 原型设计 拖拽_设计即开发,如何打通软件研发的“任督二脉”?
  6. php get 分页,PHP_codeigniter实现get分页的方法,本文实例讲述了codeigniter实现ge - phpStudy...
  7. 文件的存取方式java_三种访问文件的方式
  8. git rebase branch内部调整 调整commit顺序
  9. Spring mvc @PathVaribale
  10. requests与bs4编码