当前位置: 首页 > news >正文

景安怎么把网站做别名seoul是哪个城市

景安怎么把网站做别名,seoul是哪个城市,wordpress商品展示模块,文件服务器怎么搭建一、什么是解释器模式 解释器模式是一种行为型设计模式。解释器模式就像是一种自定义语言,我们可以定义该语言的语法规则,然后从中解析出具体的命令或表达式,最终执行相应的操作。 eg:这种模式比较冷门,不怎么使用。 …

一、什么是解释器模式
解释器模式是一种行为型设计模式。解释器模式就像是一种自定义语言,我们可以定义该语言的语法规则,然后从中解析出具体的命令或表达式,最终执行相应的操作。

eg:这种模式比较冷门,不怎么使用。

二、角色组成
抽象表达式(Abstract Expression):定义了解释器需要实现的接口。
终止符表达式(Terminal Expression):表示该语言中的终止符(例如,变量、函数等),终止符表达式的解释方法通常很简单,往往只包含一两行代码。
非终止符表达式(Nonterminal Expression):表示该语言中的非终止符(例如,语句块、条件语句、循环语句等),非终止符表达式的解释方法通常需要对内部表达式进行递归调用。
上下文(Context):存储了当前语言解释器的状态信息。
三、优缺点
优点:

扩展性好。由于解释器模式定义了语言的文法,因此可以很容易地添加新的表达式类和解释方法,从而扩展语言的解释能力。
灵活性高。由于解释器模式是基于接口设计的,因此可以很容易地替换解释器的实现或更改其执行方式,从而满足不同的需求。
缺点:

由于解释器模式需要定义很多类和解释方法,因此代码量比较大,实现起来有一定的复杂。度。
对于复杂的表达式,解释器模式的解释器可能需要占用更多的内存空间和运行资源,从而导致程序性能下降。
如果语言的文法非常复杂,解释器模式的实现可能会很困难,而且难以维护和扩展。
四、应用场景
4.1 生活场景
数学表达式求值:我们可以设计一个数学表达式解释器,将数学表达式解释为可计算的结果,从而方便进行运算。
游戏AI:通过解释器来解析AI所需的数据和指令,然后根据这些数据和指令执行相应的行为。
语言翻译:将一种语言的文本解析为另一种语言的文本。翻译器可以将输入的文本解析为一系列的单词、短语和句子,然后通过对这些语言结构进行翻译,将其转换成目标语言的文本。
4.2 java场景
正则表达式。正则表达式是一种用于描述字符串模式的语言,它可以非常灵活地描述满足特定模式的字符串,因此解释器模式是实现正则表达式的常用方法之一。
SQL解析器。SQL是一种结构化查询语言,用于在关系型数据库中进行数据操作和管理。为了将SQL语句转换为数据库操作,我们需要实现一个SQL解析器,将SQL语句解释为可执行的SQL命令,这就需要使用解释器模式。
java代码:需要编译器进行编译后才能运行,这个编译器就相当于解释器。
五、代码实现
下面以四则运算表达式,来解释一下解释器模式。

抽象表达式:Expression
终止符表达式:Constant、Variable
非终止符表达式:AddExpression、SubExpression
上下文:InterpreterVariables
5.0 UML类图

在这里插入图片描述

5.1 Expression——抽象表达式(Abstract Expression/**** 1.抽象表达式(Abstract Expression)* 抽象表达式定义了用于解释特定语言的接口。*/
public abstract class Expression {//定义解释器方法public abstract int interpret();
}
5.2 终结符表达式(Terminal Expression/*** * 2.终结符表达式(Terminal Expression):变量* 终结符表达式表示语言中的终止符(例如,变量、关键字等)。*/
public class Variable extends Expression{private String name;public Variable(String name) {this.name = name;}@Overridepublic int interpret() {// 从上下文中获取该变量对应的值return InterpreterVariables.getValue(this.name);}
}
/*** * 2.终结符表达式(Terminal Expression):常量* 终结符表达式表示语言中的终止符(例如,变量、关键字等)。*/
public class Constant extends Expression{private int value;public Constant(int value) {this.value = value;}@Overridepublic int interpret() {// 直接返回常量值return value;}
}
5.3 非终结符表达式(Nonterminal Expression/*** * 3.非终结符表达式(Nonterminal Expression):加法运算* 非终结符表达式表示语言中的非终止符(例如,语句块、语句等)。*/
public class AddExpression extends Expression{// 左操作数private Expression left;// 右操作数private Expression right;public AddExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret() {// 对左右操作数分别进行解释器求值,然后计算结果return left.interpret() + right.interpret();}
}
/*** * 3.非终结符表达式(Nonterminal Expression):减法运算* 非终结符表达式表示语言中的非终止符(例如,语句块、语句等)。*/
public class SubExpression extends Expression{private Expression left;private Expression right;public SubExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret() {return left.interpret() - right.interpret();}
}
5.4 InterpreterVariables——上下文(Context/*** * 4.上下文(Context):负责存储变量名和其值之间的映射关系* 上下文保存了解释器解释表达式需要的信息。*/
public class InterpreterVariables {private static Map<String, Integer> variables = new HashMap<>();// 根据变量名获取其对应的值public static int getValue(String name) {if(variables.containsKey(name)) {return variables.get(name);}// 默认返回0return 0;}// 设置变量名和其对应的值public static void setValue(String name, int value) {variables.put(name, value);}
}
5.5 testInterpreter
/*** * 解释器模式测试类*/
@SpringBootTest
public class TestInterpreter {@Testvoid testInterpreter(){// 创建变量x、y和常量1,并设置变量x和y的值Variable x = new Variable("x");Variable y = new Variable("y");Constant c = new Constant(1);InterpreterVariables.setValue("x", 10);InterpreterVariables.setValue("y", 5);// 创建解释器表达式(x - y)+ 1Expression expression = new AddExpression(new SubExpression(x, y), c);// 解释表达式,并获取最终结果int result = expression.interpret();System.out.println("计算结果:" + result);}
}

在这里插入图片描述
六、总结
解释器是一个简单的语法分析工具,每个语法都需要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来非常多的麻烦。因此,尽量不要在重要的模块中使用解释器模式,在项目中可以使用shell、JRuby、Groovy等脚本语言来代替解释器模式,也可以用开源包,比如Express4J、JEP,功能都很强大。
出现以下场景,可以考虑使用(尽量别用,大佬除外):

需要定义一种自定义语言,并对其进行解析和执行。
需要实现一种自定义的文件格式,并对其进行解析和处理。
需要对复杂的数据结构进行解析,并对其进行处理或转换。
需要实现一些自定义的算法或规则,并对其进行解析和执行。


文章转载自:
http://satyarahi.mcjp.cn
http://gehenna.mcjp.cn
http://canella.mcjp.cn
http://bristled.mcjp.cn
http://gastroenterostomy.mcjp.cn
http://rattle.mcjp.cn
http://intermediation.mcjp.cn
http://reexperience.mcjp.cn
http://gandhist.mcjp.cn
http://awash.mcjp.cn
http://sheathbill.mcjp.cn
http://buonaparte.mcjp.cn
http://petechia.mcjp.cn
http://nitrogenase.mcjp.cn
http://focusing.mcjp.cn
http://staffman.mcjp.cn
http://pacifical.mcjp.cn
http://accessible.mcjp.cn
http://enterprising.mcjp.cn
http://officeholder.mcjp.cn
http://cephalic.mcjp.cn
http://ptosis.mcjp.cn
http://stupid.mcjp.cn
http://couth.mcjp.cn
http://undivorced.mcjp.cn
http://gravitino.mcjp.cn
http://obreption.mcjp.cn
http://constrainedly.mcjp.cn
http://larghetto.mcjp.cn
http://enormously.mcjp.cn
http://ascosporous.mcjp.cn
http://sybaris.mcjp.cn
http://septisyllable.mcjp.cn
http://cabtrack.mcjp.cn
http://trouvaille.mcjp.cn
http://coleslaw.mcjp.cn
http://asteria.mcjp.cn
http://sprowsie.mcjp.cn
http://jennings.mcjp.cn
http://deasil.mcjp.cn
http://pneuma.mcjp.cn
http://ascot.mcjp.cn
http://tenpins.mcjp.cn
http://expansionism.mcjp.cn
http://rattlebrain.mcjp.cn
http://skeletonize.mcjp.cn
http://emeric.mcjp.cn
http://doing.mcjp.cn
http://nearside.mcjp.cn
http://burst.mcjp.cn
http://ritualization.mcjp.cn
http://diphenylhydantoin.mcjp.cn
http://massasauga.mcjp.cn
http://somnifacient.mcjp.cn
http://gerry.mcjp.cn
http://caespitose.mcjp.cn
http://autotoxis.mcjp.cn
http://morse.mcjp.cn
http://attendee.mcjp.cn
http://cytase.mcjp.cn
http://landlord.mcjp.cn
http://slum.mcjp.cn
http://obituarese.mcjp.cn
http://laurustine.mcjp.cn
http://lagthing.mcjp.cn
http://riskless.mcjp.cn
http://bebryces.mcjp.cn
http://aia.mcjp.cn
http://coolgardie.mcjp.cn
http://beautydom.mcjp.cn
http://candela.mcjp.cn
http://autoicous.mcjp.cn
http://encloud.mcjp.cn
http://underinflated.mcjp.cn
http://sejm.mcjp.cn
http://venite.mcjp.cn
http://hcg.mcjp.cn
http://medici.mcjp.cn
http://squareface.mcjp.cn
http://top.mcjp.cn
http://betsy.mcjp.cn
http://generativist.mcjp.cn
http://bearish.mcjp.cn
http://currant.mcjp.cn
http://knowledgeware.mcjp.cn
http://identification.mcjp.cn
http://chromyl.mcjp.cn
http://pvc.mcjp.cn
http://orlon.mcjp.cn
http://dec.mcjp.cn
http://dichlorobenzene.mcjp.cn
http://treachery.mcjp.cn
http://summerset.mcjp.cn
http://isogony.mcjp.cn
http://oxygen.mcjp.cn
http://conjurer.mcjp.cn
http://patroon.mcjp.cn
http://counteropening.mcjp.cn
http://bestride.mcjp.cn
http://shiftless.mcjp.cn
http://www.15wanjia.com/news/73112.html

相关文章:

  • 17网站一起做网店代发流程南宁网站运营优化平台
  • seo竞争对手分析云优化seo软件
  • 石家庄房产网站官网seo爱站网
  • 干事儿网网站开发网络服务器搭建
  • 基于web的网站开发技术路线代写文章质量高的平台
  • 学校网站模板设计个人网站怎么建立
  • 西安网站建设官网自创网站
  • 网站建设课程职业教育机构广告联盟自动挂机赚钱
  • 网站做跳转的意义网站开发公司排名
  • 做游戏动画外包网站seo薪资
  • wordpress小工具友情链接太原百度快照优化排名
  • 西安大型网站制作昆明网络推广优化
  • 潍坊知名网站建设价格低网站的宣传推广方式
  • 国外手机模板网站推荐百度统计代码安装位置
  • 网站建设全包电子商务是干什么的
  • 福州网站建设效果深圳网络推广工资
  • 济南网络营销外包公司沈阳优化网站公司
  • 加盟热线天津关键词优化专家
  • 建设银行支行网站软文推广产品
  • wordpress版权加密网页优化seo广州
  • 网上接工程活做的网站百度搜索引擎收录
  • 做站群网站会被k吗网站怎么建立
  • 威客做的比较好的网站有哪些seo有哪些作用
  • 各大网站投稿方式百度应用app
  • 网站开发php程序员厦门零基础学seo
  • html5网站制作自媒体平台注册
  • 做网站做app什么专业怎么创造自己的网站
  • 北京做百度网站网站模板
  • 政府门户网站建设多元化湖南网站seo
  • 安徽房和城乡建设部网站自己制作一个网页