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

律师网站建设公司个人网站设计需求分析

律师网站建设公司,个人网站设计需求分析,做网站要注意什么问题,深圳网站建设服务哪个便宜啊目录 1.概述2.结构3.案例实现3.1.抽象表达式类3.2.终结表达式3.3.非终结表达式3.4.环境类3.5.测试 4.优缺点5.使用场景 1.概述 #xff08;1#xff09;如下图#xff0c;设计一个软件用来进行加减计算。我们第一想法可能就是使用工具类#xff0c;提供对应的加法和减法的… 目录 1.概述2.结构3.案例实现3.1.抽象表达式类3.2.终结表达式3.3.非终结表达式3.4.环境类3.5.测试 4.优缺点5.使用场景 1.概述 1如下图设计一个软件用来进行加减计算。我们第一想法可能就是使用工具类提供对应的加法和减法的工具方法。 //用于两个整数相加 public static int add(int a,int b){ return a b; }//用于两个整数相加 public static int add(int a,int b,int c){ return a b c; }//用于 n 个整数相加(使用可变参数) public static int add(Integer... arr) { int sum 0; for (Integer i : arr) { sum i; }return sum; }上面的形式比较单一、有限如果形式变化非常多这就不符合要求因为加法和减法运算两个运算符与数值可以有无限种组合方式。比如 1 2 3 4 5、1 2 3 - 4等等。显然现在需要一种翻译识别机器能够解析由数字以及 、- 符号构成的合法的运算序列。如果把运算符和数字都看作节点的话能够逐个节点的进行读取解析运算这就是解释器模式的思维。 2解释器模式 (Interpreter pattern) 是一种行为型设计模式用于表示一个语言文法的语法规则以及如何解析和执行该语法规则。解释器模式将一个语言表达式表示为对象并定义了解析该表达式的语法规则。它包含了一个抽象表达式类和具体的表达式类。解释器模式主要通过使用递归来实现计算过程即通过调用表达式对象的解释方法来进行计算。它可以用于编译器、解释器、数学公式计算等领域。 3在解释器模式中我们需要将待解决的问题提取出规则抽象为一种“语言”。比如加减法运算规则为由数值和 、- 符号组成的合法序列“1 3 - 2” 就是这种语言的句子。解释器就是要解析出来语句的含义。但是如何描述规则呢 4文法/语法规则用于描述语言的语法结构的形式规则 expression :: value | plus | minus plus :: expression expression minus :: expression - expression value :: integer注意 这里的符号“::”表示“定义为”的意思竖线 | 表示或左右的其中一个引号内为字符本身引号外为语法。上面规则描述为 表达式可以是一个值也可以是 plus 或者 minus 运算而 plus 和 minus 又是由表达式结合运算符构成值的类型为整型数。 5抽象语法树 在计算机科学中抽象语法树 (Abstract Syntax TreeAST)或简称语法树 (Syntax tree)是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构树上的每个节点都表示源代码中的一种结构。用树形来表示符合文法规则的句子 2.结构 解释器模式包含以下主要角色 抽象表达式 (Abstract Expression) 角色定义了一个抽象的接口用于解析语法规则。通常它是一个抽象类或接口其中包含了解释器需要实现的方法。。终结符表达式 (Terminal Expression) 角色终结符表达式是最基本的表达式它代表语言中的一个基本单元通常是一个具体的值或一个变量。非终结符表达式 (Nonterminal Expression) 角色非终结符表达式是由多个终结符表达式或其他非终结符表达式组成的复合表达式。环境 (Context) 角色环境对象包含了解析器运行所需要的全局信息。客户端 (Client) 角色客户端用于创建解释器并调用其解释方法来解析语法规则。 3.案例实现 【例】设计实现加减法的软件 具体实现代码如下 3.1.抽象表达式类 AbstractExpression.java //抽象表达式类 public abstract class AbstractExpression {public abstract int interpret(Context context); }3.2.终结表达式 Variable.java //用于封装变量的类 public class Variable extends AbstractExpression{//声明存储变量名的成员变量private String name;public Variable(String name) {this.name name;}Overridepublic int interpret(Context context) {//直接返回变量的值return context.getValue(this);}Overridepublic String toString() {return name;} }3.3.非终结表达式 Plus.java //加法表达式类 public class Plus extends AbstractExpression{// 左边的表达式private AbstractExpression left;// 右边的表达式private AbstractExpression right;public Plus(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;}Overridepublic int interpret(Context context) {//将左边表达式的结果和右边的进行相加return left.interpret(context) right.interpret(context);}Overridepublic String toString() {return ( left.toString() right.toString() );} }Minus.java //减法表达式类 public class Minus extends AbstractExpression{// - 左边的表达式private AbstractExpression left;// - 右边的表达式private AbstractExpression right;public Minus(AbstractExpression left, AbstractExpression right) {this.left left;this.right right;}Overridepublic int interpret(Context context) {//将左边表达式的结果和右边的进行相减return left.interpret(context) - right.interpret(context);}Overridepublic String toString() {return ( left.toString() - right.toString() );} }3.4.环境类 Context.java //环境角色类 public class Context {//定义一个 map 集合用来存储变量以及对应的值private MapVariable,Integer map new HashMap();//添加变量的功能public void assign(Variable var, Integer value){map.put(var, value);}//根据变量获取对应的值public int getValue(Variable var){return map.get(var);} }3.5.测试 Client.java public class Client {public static void main(String[] args){//创建环境对象Context context new Context();//创建多个变量对象Variable a new Variable(a);Variable b new Variable(b);Variable c new Variable(c);Variable d new Variable(d);//将变量存储到环境变量中context.assign(a, 1);context.assign(b, 2);context.assign(c, 3);context.assign(d, 4);//获取抽象语法树 a b - c dAbstractExpression expression new Minus(a, new Plus(new Minus(b, c), d));//解释即计算int result expression.interpret(context);System.out.println(expression result);} }结果如下 (a-((b-c)d))-24.优缺点 1解释器模式的主要优点是 灵活性解释器模式可以根据需要动态地修改解释器的表达式从而扩展或修改语言。易于扩展新的解释器可以通过扩展抽象语法树节点类来轻松添加到系统中。可重用性同样的解释器可以在不同的环境下重用只需要修改解释器的上下文即可。独立性解释器模式使得解释器与其它部分相互独立修改解释器不会影响其他部分的功能。 2解释器模式的主要缺点是 复杂性因为解释器模式涉及到抽象语法树、终结符和非终结符等概念因此实现起来比较复杂。效率问题由于解释器模式使用递归调用的方式进行解释处理因此对于复杂的语法和大量的数据处理可能会导致效率问题。 5.使用场景 1解释器模式适用于以下场景 当有一个简单的语法规则并且需要频繁地对该语法进行解释和执行时可以考虑使用解释器模式。当需要将一个语言或规则进行扩展或修改时解释器模式可以提供灵活的扩展性和易于修改的特性。当语法规则相对稳定但需要根据不同的上下文进行不同的解释时可以使用解释器模式。当需要解耦语法规则的解释过程与具体的操作时解释器模式可以将语法解释与操作分离从而提高代码的可维护性和可扩展性。当需要构建一个能够解释执行特定领域语言的工具或引擎时解释器模式是一种常用的设计模式。 2总之解释器模式适用于需要解释和执行简单语法规则、动态扩展语言等场景可以提供灵活性、可扩展性和可维护性。
http://www.pierceye.com/news/158338/

相关文章:

  • 网站建设实战李静如何建设网站的能力
  • 威海 网站开发做家具的网站有哪些
  • 宁波网站建设公司怎么报价网页打开速度慢的解决方法
  • 有趣的网站有哪些推荐关键词没有排名的网站怎么做
  • 昆山网站制作哪家强海淀区企业网络公司
  • 北京网站制建设公司永兴县网站建设服务商
  • 嘉兴做网站优化公司江阴网站优化公司
  • dz可以做旅游网站吗wordpress 4.1.1 漏洞
  • 谷歌网站地图生成福州便民网免费发布信息
  • 最新军事战争新闻超级优化大师
  • 好的网站建设公司排名网站建设 交易保障
  • 怎么查看网站外链效果代理注册公司有什么风险
  • 西安网站漏洞免费自动生成小程序
  • 怎么修改网站信息同ip网站做301
  • 松江品划网络做网站logo设计网页
  • 重庆博达建设集团股份有限公司网站徐州建设企业网站
  • 有没有专门做老年婚介的网站东营会计信息网官网
  • 鞍山怎么做平台软件汕头网站时优化
  • 邹城建网站深圳装修公司排行榜
  • 泊头网站优化WordPress如何添加cnzz
  • dz论坛网站创建页面wap网站建设方案 pdf
  • 网站建设项目报告总结报告seo关于网站搜索排名关键词的标准评定
  • 东莞电商网站建设wordpress注册验证邮箱
  • 网站建设名中国建设劳动学会是假网站吗
  • 一个优秀的个人网站百度极速版免费下载安装
  • 咋做211校徽加网站wordpress免费教程视频教程
  • 网站建设制作网络营销公司蛋糕店网站模板
  • a站网址东莞市网络seo推广价格
  • 莱州市双语网站seo白帽优化
  • 不忘初心网站建设深圳公租房官网