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

刷网站排名怎么刷做网站选哪家公司

刷网站排名怎么刷,做网站选哪家公司,wordpress个性主题,广州网站建设制作的公司目录 一、什么是解释器模式 二、解释器模式的应用场景 三、解释器模式的优缺点 3.1. 优点 3.2. 缺点 四、解释器模式示例 4.1. 问题描述 4.2. 问题分析 4.3. 代码实现 4.4. 优化方向 五、总结 一、什么是解释器模式 解释器模式#xff08;Interpreter pattern… 目录 一、什么是解释器模式 二、解释器模式的应用场景 三、解释器模式的优缺点 3.1. 优点 3.2. 缺点 四、解释器模式示例 4.1. 问题描述 4.2. 问题分析 4.3. 代码实现 4.4. 优化方向 五、总结 一、什么是解释器模式 解释器模式Interpreter pattern是一种行为型(Behavioral Pattern)的设计模式用于定义语言的语法规则表示并提供解释器来处理句子中的语法。该模式将句子表示为一个抽象语法树每个节点代表一个语法规则通过递归地解释这些节点来实现对句子的解释。 解释器模式主要包含以下五类角色 抽象表达式Abstract Expression定义了解释器的接口包括一个解释方法并根据文法规则解释表达式。终结符表达式Terminal Expression实现抽象表达式接口代表文法中的终结符。非终结符表达式Non-Terminal Expression实现抽象表达式接口代表文法中的非终结符通常包含其他表达式。上下文Context包含需要被解释的信息或状态解释器通过上下文来执行解释操作。客户端Client创建和配置具体的解释器表达式构建解释器的抽象语法树并调用解释器的解释方法来解释表达式。 解释器模式的结构如下所示 二、解释器模式的应用场景 解释器模式适用于需要解释和执行特定领域语言的场景常见的适合应用解释器模式的场景包括但不限于 编程语言解释器解释器模式最经典的应用就是编程语言的解释器。例如Python、JavaScript等编程语言都使用解释器来解释和执行代码。数学表达式解析解释器模式可以用于解析和计算数学表达式。例如我们可以使用解释器模式来解析并计算一个复杂的数学公式。查询语言解析解释器模式可以用于解析和执行查询语言。例如数据库查询语言的解析和执行就可以使用解释器模式来实现。 三、解释器模式的优缺点 3.1. 优点 1可扩展性增加新的解释表达式比较方便扩展时不需要修改原有的逻辑符合开闭原则。 2灵活性改变或扩展文法都比较容易。 3实现文法容易语法树中的每个表达式节点类都是相似的易于实现。 3.2. 缺点 1类膨胀每个语法都要产生一个非终结符表达式可能导致大量类文件。 2性能问题递归解释语法可能导致效率低下。 四、解释器模式示例 4.1. 问题描述 为了更好地理解解释器模式的应用我们将以一个简单的例子来演示它的实现过程。假设我们需要设计一个简单的计算器能够解析并计算用户输入的包含加减乘除四种计算的数学表达式其中只存在数字和加、减-、乘*、除/四种符号每种元素之间以空格区分并且四种运算符号的运算顺序总是从左到右的即不限定一定要先算乘除后算加减。 4.2. 问题分析 我们以一个简单的表达式“2 3 * 4 - 5 / 3”为例其语法树可以表示为 其中包含一种终结符表达式(数字表达式)以及四种非终结符表达式加减乘除四种表达式。则我们可以 1定义一个抽象表达式接口AbstractExpression并包含一个解释方法interpret()用于返回解释结果。     2定义一个数字表达式类NumberExpression它的内部维护了一个数字对象并且其实现的interpret()方法直接返回这个数字对象。     3为加减乘除四种运算规则分别定义相应的表达式类AddExpressionSubExpressionMulExpressionDivExpression它们的内部都维护了AbstractExpression类型的运算的左值left和右值right并分别按照各自的规则实现interpret()方法返回运算结果。     4由于此计算器只需要从左往右顺序地计算下来就可以了所以表达式中并不需要知道上下文环境那么我们可以省略定义上下文类Context而直接定义客户端类Client用于对外提供运算接口execute(String exp)将接收到的表达式字符串参数转换成使用解释器对象描述的语法树并解释并输出解释结果。 4.3. 代码实现 经过上一步的分析之后下面我们通过代码来实现它 interface AbstractExpression{public int interpret(); } ​ class NumberExpression implements AbstractExpression{private int number; ​NumberExpression(int number) {this.number number;} ​Overridepublic int interpret() {return number;} } //加法 class AddExpression implements AbstractExpression{private AbstractExpression left;private AbstractExpression right; ​AddExpression(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;} ​Overridepublic int interpret() {return left.interpret() right.interpret();} } //减法 class SubExpression implements AbstractExpression{private AbstractExpression left;private AbstractExpression right; ​SubExpression(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;} ​Overridepublic int interpret() {return left.interpret() - right.interpret();} } //乘法 class MulExpression implements AbstractExpression{private AbstractExpression left;private AbstractExpression right; ​MulExpression(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;} ​Overridepublic int interpret() {return left.interpret() * right.interpret();} } //除法 class DivExpression implements AbstractExpression{private AbstractExpression left;private AbstractExpression right; ​DivExpression(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;} ​Overridepublic int interpret() {return left.interpret() / right.interpret();} } ​ class Cient{public int execute(String exp){String[] elements exp.split( );if(elements.length % 2 0){throw new RuntimeException(表达式错误);}AbstractExpression expression new NumberExpression(Integer.parseInt(elements[0]));for (int i 1; i elements.length-1; i2) {String symbol elements[i];int num;try{num Integer.parseInt(elements[i1]);}catch (NumberFormatException e){throw new RuntimeException(表达式错误);}if (symbol.equals()){expression new AddExpression(expression, new NumberExpression(num));}else if (symbol.equals(-)){expression new SubExpression(expression, new NumberExpression(num));}else if (symbol.equals(*)){expression new MulExpression(expression, new NumberExpression(num));}else if (symbol.equals(/)){expression new DivExpression(expression, new NumberExpression(num));}else {System.out.println(无效的符号);}}return expression.interpret();} } 接下来编写测试类 public static void main(String[] args) {Cient cient new Cient();System.out.println(cient.execute(2 3 * 4 - 5 / 3));System.out.println(cient.execute(5 * 2 9 - 1 / 6));System.out.println(cient.execute(5 / 5 1 / 1 * 10 - 1));} 测试结果为 测试通过  4.4. 优化方向 作为一个开发人员完成一段代码功能之后当然要不断反思自己的代码还有哪些不足就以上示例而言针对使用者有可能的千奇百怪的输入来说首先这段代码的异常捕获和提示内容就是不足的当然仅仅用来作为说明解释器模式的实例来讲我们的目的已经达到了所以这里不再多做补充不是因为懒~。另外如果我们学习过其他设计模式我们可以将解释器模式和其他设计模式结合使用而达到进一步优化的目的比如我们可以用组合模式来构建语法树用工厂模式来创建不同类型的表达式而如何通过代码来实现它们就要涉及其他设计模式的说明了本文暂不做赘述那肯定也不是因为懒~。 五、总结 解释器模式是一种强大而有趣的设计模式它可以帮助我们简化复杂问题的处理过程。通过定义文法规则、创建抽象语法树和实现解释器我们可以轻松地解释和执行特定语言的句子。希望本文对你理解解释器模式有所帮助能够在实际开发中灵活运用
http://www.zqtcl.cn/news/734783/

相关文章:

  • 网站建设零金手指花总js源码下载从哪个网站能下载
  • 网站开发属于无形资产两人合伙做网站但不准备开公司
  • 五大类型网站网站建设投标文件
  • 崇明区建设镇网站装修公司网站制作
  • 哪些网站可以做房产推广呼家楼街道网站建设
  • 微网站怎么开通萝岗手机网站建设
  • 牙科医院网站开发内江市住房和城乡建设局网站电话号码
  • 网站建设的想法和意见芜湖的网站建设公司
  • 效果好的网站建设wordpress主题基础
  • html5建设摄影网站意义crm免费客户管理系统
  • win2008 建立网站网站策划书的撰写流程
  • 德泰诺网站建设百度网盘资源搜索引擎入口
  • 谁能给个网站谢谢wordpress 主题 后门
  • 学校网站建设目的seo教学免费课程霸屏
  • 会计公司网站模板微信网站如何制作软件
  • 烟台做网站多少钱.net网站做增删改
  • 什么网站专门做软件的深圳电商网站制作
  • 局域网做网站家装公司哪家比较好
  • 免费的行情软件网站在线使用wordpress视频分享
  • 内容平台策划书网站优化公司推荐
  • 怎么在阿里巴巴网站做公司wordpress伪静态404
  • 配置 tomcat 做网站网站建设用什么语言
  • 大型的营销型网站建设怎么选择网站建设公司
  • 怎么用网站源码建站友情链接交换方式有哪些
  • 国外免费网站服务器链接幼教网站建设分析
  • 做药品网站有哪些陕西专业网站建设价格
  • 网络公司做网站网站 服务器选择
  • 湖南省重点建设项目办公室网站河南省住建局官网
  • 建设网站企业网上银行登录入口官方论坛系统
  • 嘉定建设机械网站合肥制作网页设计