设计模式之解释器模式

文章目录

  • 四则运算问题
  • 传统方案解决四则运算问题分析
  • 解释器模式基本介绍
  • 解释器模式的原理类图
  • 解释器模式来实现四则
  • 解释器模式的注意事项和细节

四则运算问题

通过解释器模式来实现四则运算,如计算 a+b-c 的值,具体要求

  1. 先输入表达式的形式,比如 a+b+c-d+e, 要求表达式的字母不能重复

  2. 在分别输入 a ,b, c, d, e 的值

  3. 最后求出结果:如图

在这里插入图片描述

传统方案解决四则运算问题分析

  1. 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果
  2. 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来解析会造成程序结构混乱,
    不够清晰.
  3. 解决方案:可以考虑使用解释器模式, 即: 表达式 -> 解释器(可以有多种) -> 结果

解释器模式基本介绍

  1. 在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器

  2. 解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,
    使用该解释器来解释语言中的句子(表达式)

  3. 应用场景
    ①应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
    ②一些重复出现的问题可以用一种简单的语言来表达
    ③一个简单语法需要解释的场景

  4. 这样的例子还有,比如编译器、运算表达式计算、正则表达式、机器人等

解释器模式的原理类图

在这里插入图片描述

对原理类图的说明-即(解释器模式的角色及职责)

  1. Context: 是环境角色,含有解释器之外的全局信息.
  2. AbstractExpression: 抽象表达式, 声明一个抽象的解释操作,这个方法为抽象语法树中所有的节点所共享
  3. TerminalExpression: 为终结符表达式, 实现与文法中的终结符相关的解释操作
  4. NonTermialExpression: 为非终结符表达式,为文法中的非终结符实现解释操作.
  5. 说明: 输入 Context he TerminalExpression 信息通过 Client 输入即可

解释器模式来实现四则

  1. 应用实例要求

    通过解释器模式来实现四则运算,如计算 a+b-c 的值

  2. 思路分析和图解(类图)

在这里插入图片描述

  1. 代码实现

https://gitee.com/luan_hao/design-pattern/tree/master/src/main/java/com/lh/interpreter

解释器模式的注意事项和细节

  1. 当有一个语言需要解释执行,可将该语言中的句子表示为一个抽象语法树,就可以考虑使用解释器模式,让程序具有良好的扩展性
  2. 应用场景:编译器、运算表达式计算、正则表达式、机器人等
  3. 使用解释器可能带来的问题:解释器模式会引起类膨胀、解释器模式采用递归调用方法,将会导致调试非常复杂、效率可能降低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何访问TDH中Inceptor 底层的元数据库TxSQL

如何访问TDH中Inceptor 底层的元数据库TxSQL 1 Inceptor概述 在大数据生态系统中,HIVE是离线数据仓库事实上的标准,绝大多数的大数据分析型系统或数据仓库系统,都是基于HIVE来构建的。 在星环的大数据平台TDH中,在功能上对应开…

基于物联网的农村地区智能微电网系统(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

uniapp webview实现双向通信

需求&#xff1a;uniapp webview嵌套一个h5 实现双向通信 uniapp 代码 <template><view><web-view src"http://192.168.3.150:9003/" message"onMessage"></web-view></view> </template><script>export defau…

Mysql主从数据恢复随笔

目录 1.使用pt-table-checksum插件安装方式如下 2.在主节点执行检查数据同步情况 3.同步检查出现的问题 3.1没有sock文件 3.2 Authentication plugin ‘sha256_password’ cannot be loaded: /usr/lib64/mysql/plugin/sha256_password.so: 无法打开共享对象文件: 没有那个文…

【办公自动化】使用Python一键往Word文档的表格中填写数据(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

vSAN数据恢复-vSAN架构下虚拟机磁盘组件出现问题的数据恢复案例

vsan数据恢复环境&#xff1a; 一套VMware vSAN超融合基础架构&#xff0c;全闪存&#xff0c;开启压缩重删。共11台服务器节点。每台服务器节点上配置1块PCIE固态硬盘和8-10块SSD固态硬盘。 每个服务器节点上创建1个磁盘组&#xff0c;每个磁盘组将1个PCIE固态硬盘识别为2个硬…

YOLOv8快速复现 官网版本 ultralytics

YOLOV8环境安装教程.&#xff1a;https://www.bilibili.com/video/BV1dG4y1c7dH/ YOLOV8保姆级教学视频:https://www.bilibili.com/video/BV1qd4y1L7aX/ b站视频&#xff1a;https://www.bilibili.com/video/BV12p4y1c7UY/ 1 平台搭建YOLOv8 平台&#xff1a;https://www.a…

使用Python进行员工流失分析

员工流失分析是指分析离开公司、企业的员工的行为&#xff0c;并将他们与公司中的现有员工进行比较。它有助于找出哪些员工可能很快离开。所以&#xff0c;如果你想学习如何分析员工流失&#xff0c;这篇文章适合你。本文中&#xff0c;将带您完成使用Python进行员工流失分析的…

【李沐深度学习笔记】基础优化方法

课程地址和说明 基础优化方法p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 基础优化方法 在讲具体的线性回归实现之前&#xff0c;要先讲一下基础的优化模型的方法 梯度下降 当模型没有显示解&#xff08…

华为孟晚舟:从最惨千金 到最强战士

作者&#xff1a;积溪 简评&#xff1a;华为25号开发布会&#xff0c;有何深意&#xff1f;从最惨千金到最强战士&#xff0c;孟晚舟和华为都回来了 #华为发布会 #孟晚舟 #任正非 #华为 华为发布会 在打谁的脸&#xff1f; 苹果只是前菜 今天才是正餐 两年前的今天 华为…

数据结构 | 树

树 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 有且仅有一个特定的称为根的结点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互不相交的有限集T1,T2,…,Tm&#…

git_回退到上一次commit与pull

git 回退到上个版本 rollback 回滚 git reset HEAD&#xff0c; git 回退到上一版本

SpringCloud 学习(一)简介和环境搭建

1. 简介 1.1 SpringCloud SpringCloud 基于 SpringBoot 提供了一套微服务解决方案&#xff0c;包括服务注册与发现&#xff0c;配置中心&#xff0c;全链路监控&#xff0c;服务网关&#xff0c;负载均衡&#xff0c;熔断器等组件&#xff0c;除了 NetFlix 的开源组件做高度抽…

SpringMVC 学习(一)Servlet

1. Hello Servlet (1) 创建父工程 删除src文件夹 引入一些基本的依赖 <!--依赖--> <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test<…

【KMP算法】C++

KMP算法的原理是通过构建部分匹配表&#xff0c;来利用已经匹配过的信息&#xff0c;避免不必要的回溯。部分匹配表是一个长度与模式字符串相等的数组&#xff0c;用于记录在每个位置上的最长公共前后缀的长度。 这样图片完全表达了KMP算法的核心思想&#xff0c;出处来自添加链…

ruoyi-nbcio项目增加右上角的消息提醒

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 因为以后流程的通知需要提醒&#xff0c;所以右上角需要增加消息提醒。 1、增加右上角的按钮与信息 <div class"right-menu"><templat…

深入探讨Vue.js:从基础到高级(最佳实践)

文章目录 Vue.js 基础1. Vue.js 是什么&#xff1f;2. Vue 实例3. 双向数据绑定 Vue 组件1. 什么是 Vue 组件&#xff1f;2. 组件之间的通信 Vue 模板语法1. 插值和指令2. 条件和循环3. 事件绑定和表单输入绑定 Vue 路由1. Vue Router安装和配置&#xff1a;导航&#xff1a; 2…

常识判断 --- 党史

目录 中共1~3大 例题 国民党 例题 中共4~5大 例题 中共起义~会议 例题 中共六届六中全会&#xff08;1938年9月&#xff09; 中共七大&#xff08;1945年4月&#xff09; 例题 中共七届二中全会 例题 中共8~10大 中共11~12届全会 例题 中共13~14大 …

拼多多商品详情数据接口

拼多多商品详情接口的具体内容。获取拼多多商品详情&#xff0c;可以参考如下方式&#xff1a; item_get_app-根据ID取商品详情原数据接口包括&#xff1a;标题&#xff0c;价格&#xff0c;促销价&#xff0c;优惠券&#xff0c;库存&#xff0c;销量&#xff0c;详情图片&am…

前端自定义导出PPT

1、背景 前端导出PPT&#xff0c;刚接触这个需求&#xff0c;还是比较懵逼&#xff0c;然后就在网上查找资料&#xff0c;最终确认是可行的&#xff1b;这个需求也是合理的&#xff0c;我们做了一个可视化数据报表&#xff0c;报表导出成PPT&#xff0c;将在线报表转成文档类型…