解释器模式 Interpreter
代码例子
参考
1、解释器模式定义
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
说明:解释器模式设计到文法规则和抽象语法树。
2、解释器模式的结构
解释器模式包含四个角色:
1)抽象表达式(AbstractExpress):声明抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。
2)终结符表达式(TerminalExpress):是抽象表达式的子类,实现了与文法中的终结符相关联的解释操作,句子中的每一个终结符都是该类的一个实例。
对于非终结符表达式,其代码相对来说比较复杂,可以通过非终结符表达式组合成更加复杂的结构。
3)非终结符表达式(NonterminalExpress):是抽象表达式的子类,实现了文法中非终结符表达式的解释操作。在非终结符表达式中可以包含终结符表达式,也可以包含非终结符表达式,其解释操作一般用递归来实现。
4)环境类(Context):又称为上下文类,用于存储解释器之外的一些全局信息。在该类中一般包含一个Hashtable或List等类型的集合对象,存储一系列公共信息,例如变量名与值的映射关系(key/value)等。
3、解释器模式的优点
1)易于改变或扩展文法;
2)实现文法较为容易;
3)符合开闭原则。
4、解释器模式的缺点
1)对于复杂文法难以维护;
2)执行效率较低。
转载于:https://www.cnblogs.com/rockywood/p/6642479.html
解释器模式 Interpreter相关推荐
- java interpreter_解释器模式(Interpreter)Java
定义: 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 结构图: AbstractExpression解释器模式 ...
- 【白话设计模式二十二】解释器模式(Interpreter)
为什么80%的码农都做不了架构师?>>> #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...
- 设计模式之解释器模式(Interpreter)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 解释器模式(interpreter)解析例子
摘要:本文深入浅出的讲述了设计模式中的解释器模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 解释器模式属于行为型模式,其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该 ...
- 设计模式的理解:解释器模式 Interpreter
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式被用在 SQL 解析.符号处 ...
- 35解释器模式(Interpreter Pattern)
动机(Motivate): 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化. 在这种情况下,将特定领域的问题 ...
- [设计模式-行为型]解释器模式(Interpreter)
一句话 看起来是用来解释一种语言的文法.(类似不同的解释器子类解释不同的字符) 和编译器类似的解释器, 实际状况可能使用的比较少. 概括 解析 INTERPRETER-俺有一个<泡MM真经> ...
- 设计模式循序渐进(9)解释器模式 Interpreter
通过解释器模式实现阿拉伯数字与罗马数字的相互转换. 具体的模式分析解说日后补发. Delphi代码: unit uInt2RomeInterpreter; { 单元说明:将整数转换为罗马数字 ...
- 设计模式之15 - 解释器模式Interpreter
1. 解释器模式(Interpreter Pattern)的定义 (1)定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. ①文法:即语法规则.在解 ...
- 设计模式之略见一斑(解释器模式Interpreter)
解释器模式是一种比较难理解的模式,但如果你对Command(命令模式)和Composite(组合模式)很了解的话,你会发现其实解释器模式就是这两种的组合.为何要使用解释器模式,如何用解释器模式呢,这就 ...
最新文章
- 系统管理员在企业中的职业定位及发展方向 连载(三)
- IE8不兼容你的网页 怎么办? - 简单开启兼容模式
- 1619. [HEOI2012]采花
- Centos7安装NVIDIA的驱动的坑
- Mac环境下安装配置Redis
- P90音频播放无声音问题(ACC音频文件)
- Ubuntu下安装python3
- Linux下iwconfig权限,Linux中用iwconfig配置wireless-tools
- 软件项目管理测试文档,软件项目管理具体方法体系示例
- JavaScript制作游戏摇杆方向盘
- 服务器显示阵列卡升级,Systemx服务器在BIOS中刷新阵列卡微码
- [Vani有约会]雨天的尾巴
- android+video+自动播放源码,华为手机浏览器使用Video.js无法自动播放
- 百度、快手、商汤、旷视等重磅嘉宾确认出席AI ProCon 2019,你还剩1天早鸟票特权!...
- 创业者、如何可以投资小,又可以依附互联网去创业?
- 最好的降噪蓝牙耳机有哪些?目前最好的降噪蓝牙耳机推荐
- .h5文件转.csv文件
- java web excel导入数据库
- Docker 修改容器端口
- svm兵王_飞彩网福利彩
热门文章
- 入侵检测系统的性能的辨别(3)
- ECCV 2020 | CV “造车”,生成内容一致的车辆数据集 |
- ECCV 2020 Oral | BorderDet : 用边界特征做检测
- mysql killed状态连接_MySQL: kill connection的实现简析
- 学3D建模,工作后薪资一般是多少
- ACM MM2021 | 快手获得Grand Challenge第一名
- 干货收藏!639页《深度学习:Deep Learning》图文并茂课程PPT
- Facebook官方出品~时域音频分离模型登GitHub热榜
- float php 运算_PHP面试经典题目
- HTML中制作循环广告条,一种循环展示广告的广告箱的制作方法