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

免费的网站后台管理系统建网站张掖哪家强?

免费的网站后台管理系统,建网站张掖哪家强?,网站要交钱吗,傻瓜网页制作工具行为型模式-解释器模式 8.10解释器模式8.10.1概念8.10.2场景8.10.3优势 / 劣势8.10.4解释器模式可分为8.10.5解释器模式8.10.6实战8.10.6.1题目描述8.10.6.2输入描述8.10.6.3输出描述8.10.6.4代码 8.10.7总结 8.10解释器模式 8.10.1概念 ​ 解释器模式用于定义一个语言的文法… 行为型模式-解释器模式 8.10解释器模式8.10.1概念8.10.2场景8.10.3优势 / 劣势8.10.4解释器模式可分为8.10.5解释器模式8.10.6实战8.10.6.1题目描述8.10.6.2输入描述8.10.6.3输出描述8.10.6.4代码 8.10.7总结 8.10解释器模式 8.10.1概念 ​ 解释器模式用于定义一个语言的文法规则并解释和执行该语言中的表达式。它通过将语言表达式表示为一个抽象语法树并提供解释器来遍历和执行该语法树从而实现对语言的解释和执行 8.10.2场景 ​ 例如编译器将源代码作为输入通过词法分析和语法分析构建抽象语法树AST。然后编译器使用解释器模式来遍历和执行这个抽象语法树将源代码转换为机器码并执行该机器码。 8.10.3优势 / 劣势 抽象语法树使得算法独立于语法抽象语法树作为构建解析器的结构使得解析器的结构和实现与输入的文本语法无关易于单独扩展由于解析器和语法规则分别通过抽象语法树和上下文无关文本来表示因此易于单独扩展 抽象语法树复杂若语法规则非常复杂抽象语法树可能会变得非常大和复杂可能导致解析器实现和维护变得困难性能不如基于字符的解析器由于抽象语法树和上下文无关文本都需要存储和解析 8.10.4解释器模式可分为 抽象表达式AbstractExpression定义了解释器的接口包含了解释器的方法interpret终结符表达式TerminalExpressio在语法中不能再分解为更小单元的符号非终结符表达式Non-terminalExpression文法中的复杂表达式它由终结符和其他非终结符组成上下文Context包含解释器之外的一些全局信息可以存储解释器中间结果也可以用于向解释器传递信息 8.10.5解释器模式 package com.technologystatck.designpattern.mode.interpreter;public class Interpreters {public static void main(String[] args) {Context context new Context();Expression expression new AddException(new TerminalExpression(1), new TerminalExpression(2));int resulult expression.interpret();System.out.println(Result:resulult);System.out.println(Context的全局变量Context.CONTEXTSTR);} }//创建抽象表达式接口定义解释器的接口 //声明一个interpret方法用于解释语言中的表达式 //抽象表达式接口 interface Expression {int interpret(); }//创建具体的表达式类实现抽象表达式接口 //用于表示语言中的具体表达式 class TerminalExpression implements Expression{private int value;public TerminalExpression(int value) {this.value value;}Overridepublic int interpret() {return value;} }//非终结符表达式抽象表达式的一种 //用于表示语言中的非终结符表达通常包含其他表达式 class AddException implements Expression{private Expression left;private Expression right;public AddException(Expression left, Expression right) {this.left left;this.right right;}Overridepublic int interpret() {return left.interpret()right.interpret();} }//上下文包含解释器需要的一些全局信息或状态 class Context{//可以在上下文中存储一些全局信息或状态public static final String CONTEXTSTRcontextStr; }8.10.6实战 8.10.6.1题目描述 小明正在设计一个计算器用于解释用户输入的简单数学表达式每个表达式都是由整数、加法操作符、乘法操作符组成的表达式中的元素之间用空格分隔请你使用解释器模式帮他实现这个系统。 8.10.6.2输入描述 每行包含一个数学表达式表达式中包含整数、加法操作符和乘法操作符*。 表达式中的元素之间用空格分隔。 8.10.6.3输出描述 对于每个输入的数学表达式每行输出一个整数表示对应表达式的计算结果。 8.10.6.4代码 package com.technologystatck.designpattern.mode.interpreter;import java.util.Scanner; import java.util.Stack;public class Test {public static void main(String[] args) {Scanner scanner new Scanner(System.in);Context context new Context();//处理用户输入的数学表达式while (scanner.hasNextLine()) {String userInput scanner.nextLine();Expression expression parseExpression(userInput);if (expression ! null) {//将表达式入栈context.pushExpression(expression);System.out.println(expression.interpret());} else {System.out.println(Invalid expression.);}}}//用于解析用户输入的数学表达式并返回相应的抽象表达式类private static Expression parseExpression(String userInput) {try {//定义一个表达式栈StackExpression expressionStack new Stack();//将用户输入的字符串转换为字符数组方便处理。char[] tokens userInput.toCharArray();//随意设置一个符号//主要判断有没有识别进正确的、*char operator!;//遍历字符数组处理字符串。for (int i 0; i tokens.length; i) {char token tokens[i];if (Character.isDigit(token)) {//将数字传入进去expressionStack.push(new NumberExpression(Character.getNumericValue(token)));//若栈中有两个以上的元素说明可以进行运算if (i 1 tokens.length expressionStack.size() 2) {Expression right expressionStack.pop();Expression left expressionStack.pop();//若有匹配上的则直接入栈if (operator ) {expressionStack.push(new AddException(left, right));} else if (operator *) {expressionStack.push(new MulException(left, right));}else{System.out.println(符号有误);}i; //跳过下一个字符因为已经处理过了}}else{//若不为数字就进入这里将符号赋给操作变量operatortoken;}}//返回最后一个元素即最终的表达式。return expressionStack.pop();} catch (Exception e) {return null;}} }//创建抽象表达式接口 interface Expression {int interpret(); }//创建终结符表达式类实现抽象表达式接口 class NumberExpression implements Expression {private int number;public NumberExpression(int number) {this.number number;}Overridepublic int interpret() {return number;} }//创建非终结符表达式加法 class AddException implements Expression {private Expression left;private Expression right;public AddException(Expression left, Expression right) {this.left left;this.right right;}Overridepublic int interpret() {return left.interpret() right.interpret();} }//创建非终结符表达式乘法 class MulException implements Expression {private Expression left;private Expression right;public MulException(Expression left, Expression right) {this.left left;this.right right;}Overridepublic int interpret() {return left.interpret() * right.interpret();} }//上下文类 class Context {//用于存储表达式private StackExpression expressionStack new Stack();//将给定的表达式入栈public void pushExpression(Expression expression) {expressionStack.push(expression);}//从栈顶弹出并返回一个表达式public Expression popExpression() {return expressionStack.pop();}}8.10.7总结 优点可以实现复杂的语法分析功能同时解析器和语法规则易于单独扩展总结就是通过自己定义独立的抽象语法树使用抽象表达式用于定义解释器的接口、终结符表达式用于定义符号、非终结符表达式包含终结符和非终结符用于存储解释器结果或者向解释器传递信息、上下文来完成解释器的功能场景需要解释和执行特定领域或业务规则的语言时
http://www.w-s-a.com/news/94785/

相关文章:

  • 推进文明网站建设免费设计公司logo设计
  • 做电脑租赁网站server 2008 网站部署
  • 做网站的公司一年能赚多少钱wordpress作者增加分类插件
  • 苏州尚云网站建设专业摄影网站推荐
  • 020网站开发微信公众号直接链接网站怎么做
  • 学做烘焙的网站某网站注册需要邮箱是怎么弄
  • 网站的特效代码公司网站开发的工作内容
  • 网站制作哪家好商城网站建设预算要多少钱
  • 怎么做律所的官方网站微网站可以做商城吗
  • 通用网站后台管理系统(php版)网站备案ip查询网站查询
  • 制作网站代码吗江阴网站建设推广
  • 汕头建网站wordpress文章网址采集
  • 十大景观设计网站用vue框架做的网站
  • 福建省建设监理网官方网站做外贸网站卖什么东西好
  • 公司做网站排名东莞关键词优化推广
  • 连云港做企业网站公司全网营销与seo
  • 电子毕业设计代做网站wordpress 插件放在那
  • 黄石规划建设局网站怎么做存储网站
  • 网站安装wordpress滨江网站建设
  • 河南官网网站建设一般使用的分辨率显示密度是
  • dedecms新网站 上传到万网的空间宝洁公司网站做的怎么样
  • 网站建设语录优惠券的网站怎么做的
  • 白山市住房和建设局网站有实力高端网站设计地址
  • 沧州网站建设制作设计优化深圳网站自然优化
  • 企业做网站 乐云seowordpress中修改html
  • 网站细节门户wordpress主题下载
  • 全景网站模版wordpress套餐
  • 华为云建网站dw制作一个手机网站模板
  • 定陶菏泽网站建设河北新出现的传染病
  • 商业网站建设案例教程郑州服装网站建设公司