【设计模式】第17节:行为型模式之“解释器模式”
一、简介
解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。
二、适用场景
- 领域特定语言
- 复杂输入解释
- 可扩展的语言结构
三、UML类图

四、案例
对输入的特定格式的打印语句进行解析并执行。
package mainimport ("fmt""strconv""strings"
)type Expression interface {Interpret()
}type PrintExpression struct {Message string
}func NewPrintExpression(msg string) *PrintExpression {return &PrintExpression{Message: msg}
}func (pe *PrintExpression) Interpret() {fmt.Printf("message: %v\n", pe.Message)
}type RepeatExpression struct {RepeatCount intExpression Expression
}func NewRepeatExpression(repeatCount int, expression Expression) RepeatExpression {return RepeatExpression{RepeatCount: repeatCount, Expression: expression}
}func (re *RepeatExpression) Interpret() {for i := 0; i < re.RepeatCount; i++ {re.Expression.Interpret()}
}func main() {command := "REPEAT 3 TIMES: PRINT Hello"words := strings.Split(command, " ")fmt.Printf("words: %v\n", words)if words[0] == "REPEAT" {repeatCount, _ := strconv.Atoi(words[1])printExpression := NewPrintExpression(words[4])repeatExpression := NewRepeatExpression(repeatCount, printExpression)repeatExpression.Interpret()}
}
相关文章:
【设计模式】第17节:行为型模式之“解释器模式”
一、简介 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 二、适用场景 领域特定语言复杂输入解释可扩展的语言结构 三、UML类图 四、案例 对输入的特定格式的打印语句进行解析并执行。 packag…...
各传输介质详细知识点
一.百兆网传输介质 快速以太网(802.3u) 100Base-T2 电缆:2对3类UTP 最大段长:100m 特性阻抗:100 100Base-T4 电缆:4对3类UTP 最大段长:100m 特点:8B/6T,NRZ编码 特性阻抗:1…...
历史随想随记
古往今来所有的王侯将相如不都成为人们茶余饭后的笑谈,一个人无论多么厉害,多么聪明,多么奸诈,多么有权势,他们都逃不出一个结局——死亡,我觉得这是人生最大的悲哀。看历史看的多了,就会发现这…...
ClickHouse Java多个参数的UDF编写
一、环境版本 环境版本docker clickhouse22.3.10.22 docker pull clickhouse/clickhouse-server:22.3.10.22二、XML配置 2.1 配置文件 # 创建udf配置文件 vim /etc/clickhouse-server/demo_function.xml<functions><function><type>executable</type&…...
RPA除了和OCR、NLP技术结合,还能和什么技术结合?
鉴于业内现在也经常把RPA称为数字员工,就虚拟一个人的形象来解答吧。 首先是头部,实现人的“听看说想”能力: 听:ASR(语音识别技术),主要用于听取和理解语音输入,让RPA能处理语音数…...
AssertionError: Torch not compiled with CUDA enabled
Pytorch和CUDA版本不兼容,运行python后(终端输入python回车)用以下代码测试 import torch print(torch.__version__) print(torch.cuda.is_available())返回False则说明目前的pytorch版本无法使用显卡,如下图所示 接着重装合适版…...
【Ubuntu 系统使用进入,自动进入base虚拟环境解决最全】
项目场景: 在Ubuntu上安装完anaconda后,发现每次打开终端后都会自动进入到base的虚拟环境中去,虽然在这些环境下使用问题不大,但一些软件的安装在虚拟环境下有影响。每次使用conda deactivate退出也很麻烦。 问题描述 安装玩之…...
C++项目——云备份-⑨-服务端与客户端功能联调
文章目录 专栏导读1.服务端源代码2.客户端源代码3.浏览器访问测试//listshow 4.上传文件测试5.文件下载测试 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿里云专家博主&…...
Linux两条服务器实现相互免密登录
1.准备两台虚拟机,一台充当服务器端(server),一台充当客户端(client) 服务器端(server):192.168.75.139 客户端(client):192.168.75…...
华纳云Ubuntu环境怎么编译安装PHP和Nginx
在Ubuntu环境中编译安装PHP和Nginx需要进行一系列步骤。以下是安装PHP和Nginx的一般过程: 1. 更新系统: 首先,确保您的系统是最新的,运行以下命令更新软件包列表和已安装的软件包: sudo apt update sudo apt upgra…...
Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45
导读Canonical 近日正式发布了 Ubuntu 23.10(Mantic Minotaur)操作系统,其中包含一些最新的 GNU/Linux 技术、改进的硬件支持以及许多其他变化。 Ubuntu 23.10 采用了最新的 Linux 6.5 内核系列,并为 Ubuntu 桌面和服务器增强了 z…...
Linux:KVM虚拟化
本章操作基于centos7系统 简介 KVM是Kernel Virtual Machine的简写,目前Redhat只支持在64位的Rhel5.4以上的系统运行KVM,同时硬件需要支持VT技术。KVM的前身是QEMU,在2008年被redhat公司收购并获得了一项hypervisor技术,不过redh…...
HTML标签,列表,表格相关
HTML标签的分类 HTML标签可以分为以下几类: 标题标签:用于定义网页的标题,分为h1、h2、h3、h4、h5和h6。 段落标签:用于定义文本的段落,常用的有p标签。 链接标签:用于定义链接,常用的有a标签…...
【音视频】Linux | FFmpeg源码搭建
Linux | FFmpeg源码搭建 时间:2023-06-21 文章目录 `Linux` | `FFmpeg`源码搭建@[toc]1.参考2.获取源码2-1.建立工作目录2-2.获取`AAC`2-3.获取`X264`2-4.获取`X265`2-5.获取`FFmpeg`3.编译/安装3-1.编译`AAC`3-1-1.解压源码3-1-2.编译3-1-3.安装3-2.编译`X264`3-2-1.解压源码…...
Ansible中常用模块
1.ansible实现管理的方式 Ad-Hoc //利用ansible命令直接完成管理,主要用于临时命令使用场景 playbook //ansible脚本,主要用于大型项目场景,需要前期的规划 2.Ad-Hoc执行方式中如何获得帮助 ansible-doc …...
2000-2021年上市公司产融结合度量数据
2000-2021年上市公司产融结合度量数据 1、时间:2000-2021年 2、指标:股票代码、年份、是否持有银行股份、持有银行股份比例、是否持有其他金融机构股份、产融结合 3、来源:上市公司年报 4、范围:上市公司 5、样本量ÿ…...
2023最新最全Web自动化测试面试题
1、Selenium 中 hidden 或者是 display none 的元素是否可以定位到? 不可以。可以写 JavaScript 将标签中的 hidden 先改为 0,再进行定位元素。 2、Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的&am…...
List的add(int index,E element)陷阱,不得不防
项目场景: 项目中有两个List列表,一个是List1用来存储一个标识,后续会根据这个标识去重。 一个List2是用来返回对象的,其中对象里也有一个属性List3。现需要将重复的标识数据追加到List3 我想到的两个方案: 尽量不动…...
如何使用drawio画流程图以及导入导出
画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…...
腾讯云轻量服务器“镜像类型”以及“镜像”选择方法
腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像,腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍: 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像:独有的应用镜像除了包…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
